本章整理内容
使用 docker-compose 快速启动 mongodb简单的工具操作与 用指令MongoDB Shell 搜寻与更新资料MongoDB是NoSQL的资料库,以文件储存资料,一般资料库开Table须定义栏位(大小、型别、名称等),但是Collection完全不事先定义栏位,每笔document可以有不等数量的栏位。。
名词对应:
1.启动mongo docker
事先须安装好docker与docker-compose,
这边直接新增docker-compose.yml 贴上网路找到的内容
version: '3.1'services: mongo: image: mongo ports: - "27017:27017" restart: always environment: MONGO_INITDB_ROOT_USERNAME: root MONGO_INITDB_ROOT_PASSWORD: example
在与yml党相同目录下启动
➜ mongo git:(master) ✗ docker-compose up -d Creating network "mongo_default" with the default driverCreating mongo_mongo_1 ... done
2.操作资料内容
以下可用透过一些网上mongo工具 ex Robo3T操作
先进行连线进入介面host: localhost, port: 27017
CreateDB"test",新增一笔Collection"user"新增Documanet如下(Json格式)1.{ "profile" : { "name" : "user1", "gender" : "F", "age" : 18 }}
新增完会自动产生唯一的objectID,透过工具也可以对资料做简单的修改动作。
3.mongo shell
一般工具都可以看到资料内容,但如果要下类似SQL的语法要改成下列的用法可以在有提供shell指令视窗的工具上下指令去做更新进阶的搜寻例如mongo 3T上方就有视窗可以使用.搜寻指令
搜寻全部
db.getCollection('user').find({})
搜寻by_id
db.getCollection('user').find({_id:ObjectId("5eaa780f3dfac43981e4412c")})
搜寻内容值
db.getCollection('user').find({"profile.name":"user1"})
搜寻範围 数字型态
[gt大于,gte大于等于,lt小于,lte小于等于]
db.getCollection('user').find({"profile.gender":"F","profile.age":{$gt:2,$lte:18}})
搜寻範围 字串型态
按UTF-8进行字典排序 表搜寻字母A~Z间
db.getCollection('user').find({"profile.name":{$gt:"a",$lte:"z"}})
计算总数
db.getCollection('user').find().count()
排序
依命名排序,其中 1 为升序排列,而 -1 是用于降序排列
db.getCollection('user').find({}).sort({name:1})
显示笔数(limit)与开始(skip)
可以用他来做分页读取
db.getCollection('user').find({}).sort({name:1}).skip(0).limit(2)
批次更新
一般来说工具就可以做内容更新,但如果需要透过指令,
更新栏位
将性别栏位“F”全改成“woman”
db.getCollection('user').find().forEach( function(d) { if(d.profile.gender=="F"){ d.profile.gender="woman" db.getCollection('user').update({"profile.name":d.profile.name},d); print(d.profile.name+" process change done" ); };});
新增栏位合併内容
db.getCollection('user').find().forEach( function(d) {d.description= d.profile.name+","+d.profile.gender;db.getCollection('user').update({"profile.name":d.profile.name},d); print(d.profile.name+" process change done" ); });
删除栏位
db.getCollection('user').find().forEach( function(d) {delete d.descriptiondb.getCollection('user').update({"profile.name":d.profile.name},d); print(d.profile.name+" process change done" ); });
如果是要在mongo的docker环境上面下指令
需要把指令包成js,档案丢进去docker里面,然后下指令
load("script/Change.js") //档案位置mongo 127.0.0.1:27017/test Change.js
执行结果与上述内容一样
之后再介绍如何用 golang 程式去对 mongo CRUD 操作.(待续)