安装
安装文档:https://www.runoob.com/mongodb/mongodb-osx-install.html
运行 MongoDB
上面选择了brew安装mongo,因此下面也使用该方法运行mongo。
我们可以使用 brew 命令或 mongod 命令来启动服务。
brew 启动:
brew services start mongodb-community@4.2
brew 停止:
brew services stop mongodb-community@4.2
mongod 命令后台进程方式:
mongod --config /usr/local/etc/mongod.conf --fork
这种方式启动要关闭可以进入 mongo shell 控制台来实现:
> db.adminCommand({ "shutdown" : 1 })
运行mongodb
cd /usr/local/opt/mongodb-community@4.2/bin
./mongo
快速入门
启动服务:service mongod start
后台启动mongo,日志输出到文件中:mongod --dbpath /usr/local/var/mongodb --logpath /usr/local/var/log/mongodb/mongo.log --fork
- –dbpath 设置数据存放目录
- –logpath 设置日志存放目录
- –fork 在后台运行
直接启动,日志输入到控制台上:mongod --config /usr/local/etc/mongod.conf
启动成功后返回:
lena@LENALIN-MB0 var % mongod --dbpath /usr/local/var/mongodb --logpath /usr/local/var/log/mongodb/mongo.log --fork
about to fork child process, waiting until server is ready for connections.
forked process: 33815
child process started successfully, parent exiting
查看服务是否启动:ps aux | grep -v grep | grep mongod
lena@LENALIN-MB0 var % ps aux | grep -v grep | grep mongod
lena 33815 0.0 0.1 5129252 23780 ?? S 2:54PM 0:01.20 mongod --dbpath /usr/local/var/mongodb --logpath /usr/local/var/log/mongodb/mongo.log --fork
- 配置文件:/usr/local/etc/mongod.conf
- 日志文件路径:/usr/local/var/log/mongodb
- 数据存放路径:/usr/local/var/mongodb
数据库操作
查看所有数据库:show dbs
查看当前数据库:db
创建/切换到数据库:use 数据库名
删除数据库:db.数据库名.dropDatabase()
集合操作
创建集合
文档:https://www.runoob.com/mongodb/mongodb-create-collection.html
语法:db.createCollection(name[, options])
- name: 要创建的集合名称
- options: 可选参数, 指定有关内存大小及索引的选项
- size(数值):为固定集合指定一个最大值,即字节数。
- capped(bool):如果为 true,则创建固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。
当该值为 true 时,必须指定 size 参数。 - max(数值):指定固定集合中包含文档的最大数量。
- 在插入文档时,MongoDB 首先检查固定集合的 size 字段,然后检查 max 字段。
例如:不指定options创建集合:
> db.createCollection("lena")
{ "ok" : 1 }
> show collections
lena
指定options创建集合
> db.createCollection("test",{capped:true,size:2})
{ "ok" : 1 }
> db
test
查看集合
查看所有集合:show collections
或 show tables
删除集合
语法:db.集合名称.drop()
返回值:成功返回true;失败返回false
文档操作
文档的数据结构和 JSON 基本一样。
所有存储在集合中的数据都是 BSON 格式。
插入文档
语法:db.集合名.insert(document)
- 若插入的数据主键已经存在,则会抛 org.springframework.dao.DuplicateKeyException 异常,提示主键重复,不保存当前数据。
- 如果要插入的集合不存在,则会自动创建该集合并插入文档。
- document是由key,value组成的 如{“title”:“nihao”,“add”:true}
插入一个新文档:db.collection.insertOne(document,{writeConcern: <document>})
- writeConcern:写入策略,默认为 1,即要求确认写操作,0 是不要求。可选。
插入一个或多个文档:db.集合名.insertMany([document1,document2...],{writeConcern: <document>,ordered:<boolean>)
- ordered:指定是否按顺序写入,默认 true,按顺序写入。可选。
插入一个变量:将数据赋值给变量,然后插入该变量到集合中
> document=({title:'hello'})
{
"title":"hello"
}
> db.集合名.insert(document)
WriteResult({ "nInserted" : 1 })
查看文档
查看已插入文档:db.集合名.find(query,projection)
- query :可选,使用查询操作符指定查询条件
- projection :可选,指定查询返回的键值对。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)
以格式化方式显示所有文档,使用pretty()方法:db.集合名.find().pretty()
只查询一个文档:db.集合名.findOne()
limit()
指定查询记录的数量,语法:db.集合名.find(...).limit(数字)
skip()
跳过指定数量的记录,语法:db.集合名.find(...).limit(数字).skip(数字)
sort()
指定参数对查询的数据进行排序,1表示升序,-1表示降序:db.集合名.find().sort({<key>:1/-1})
更新文档
更新已存在的文档:
db.集合名.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
)
-
query : update的查询条件,类似sql update查询内where后面的。
-
update : update的对象和一些更新的操作符(如KaTeX parse error: Expected '}', got 'EOF' at end of input: …ongoDB 教程'},{**set**:{‘title’:‘菜鸟MongoDB’}}),只会更新找到的第一条文档,若需要更新多条要设置multi参数为true。
$ 格式 含义 in {,{$in:[,…]}} 返回key值符合value1/value2…的元素 inc {"$inc":{:}} key值自增/自减value set {"$set":{:}} key值设置为value {:} 等于 lt {:{$lt:}} 小于 lte {:{$lte:}} 小于等于 gt {:{$gt:}} 大于 gte {:{$gte:}} 大于等于 ne {:{$ne:}} 不等于 {:,:} and {$or:[:,:]} or type {:{$type:}} key数据类型是否为value mongo拥有的数据类型:https://www.runoob.com/mongodb/mongodb-operators-type.html
-
upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
-
multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
-
writeConcern :可选,抛出异常的级别。
_id存在则更新,不存在则新增:db.集合名.save(<document>,{writeConcern: <document>})
- writeConcern :可选,抛出异常的级别。
删除文档
语法:db.集合名.remove(<query>,{justOne: <boolean>,writeConcern: <document>})
- query :(可选)删除的文档的条件。
- justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。
- writeConcern :(可选)抛出异常的级别。
索引
创建索引:db.集合名.createIndex(keys,options)
-
keys:是要添加索引的字段,一个或多个
-
options:可选参数(以下表格来源:https://www.runoob.com/mongodb/mongodb-indexing.html)
参数 类型 描述 background Boolean 建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引,即增加 “background” 可选参数。 “background” 默认值为false。 unique Boolean 建立的索引是否唯一。指定为true创建唯一索引。默认值为false. name string 索引的名称。如果未指定,MongoDB的通过连接索引的字段名和排序顺序生成一个索引名称。 dropDups Boolean **3.0+版本已废弃。**在建立唯一索引时是否删除重复记录,指定 true 创建唯一索引。默认值为 false. sparse Boolean 对文档中不存在的字段数据不启用索引;这个参数需要特别注意,如果设置为true的话,在索引字段中不会查询出不包含对应字段的文档.。默认值为 false. expireAfterSeconds integer 指定一个以秒为单位的数值,完成 TTL设定,设定集合的生存时间。 v index version 索引的版本号。默认的索引版本取决于mongod创建索引时运行的版本。 weights document 索引权重值,数值在 1 到 99,999 之间,表示该索引相对于其他索引字段的得分权重。 default_language string 对于文本索引,该参数决定了停用词及词干和词器的规则的列表。 默认为英语 language_override string 对于文本索引,该参数指定了包含在文档中的字段名,语言覆盖默认的language,默认值为 language.
聚合
主要用于求平均值、求和等情况。
语法:db.集合名.aggregate([{$group:{分组规则,聚合语法}}])
- 分组规则:一般是以
_id
作为分组规则 - 聚合语法:如下表,可以进行求和/求平均/… 指明要聚合的字段 同时要自定义一个key作为返回的键
例如,求每个作者(by_user)所写的文章个数:db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}])
$ | 语法 | 描述(前提:在当前分组) |
---|---|---|
sum | :{$sum:} | 求和preKey的值 作为key的value返回 |
avg | :{$avg:} | 求preKey的平均值 作为key的value返回 |
min | :{$min:} | 求preKey中的最小值 作为key的value返回 |
max | :{$max:} | 求preKey中的最大值作为key的value返回 |
push | :{$push:} | 将value加入到key中 不会判断是否有重复的值 |
addToSet | :{$addToSet:} | 将value加入到key中 会判断是否有重复的值(若存在则不加入) |
first | :{$first:} | 获取preKey中第一个文档数据 作为key的value返回 |
last | :{$last:} | 获取preKey中最后一个文档数据 作为key的value返回 |
管道
语法:db.article.aggregate(...)
$ | 语法 | 描述 | 例子 |
---|---|---|---|
project | {$project:{:1/0}} | 控制输出字段 1表示输出 0表示不输出 _id默认是被包含的 | {$project:{_id:0,title:1}} |
match | {$match:{:{过滤条件}} | 过滤数据 只输出符合文档的数据 | { $match : { score : { $gt : 70, $lte : 90 } } } |
limit | {$limit:{:}} | 限制返回文档数value | |
skip | {$skip:{:}} | 跳过文档数 | |
unwind | 将文档中某一数组类型字段拆分多条 每条包含一个值 | ||
group | 文档分组 用于统计/求平均等情况 | [ { $match : { score : { $gt : 70, $lte : 90 } } }, { $group: { _id: null, count: { $sum: 1 } } } ] | |
sort | 排序 | ||
geoNear | 输出接近某一地理位置的有序文档 |
参考
[1] 菜鸟教程
Golang操作mongo可参考文章:https://blog.youkuaiyun.com/lena7/article/details/123003131