文档基本CRUD
文档(document)的数据结构是和JSON类似的BSON
文档的插入
单个文档的插入
使用insert()或save()方法向集合插入文档,语法如下:
db.collection.insert(
<document or array of ducuments>,
{
writeConcern: <document>,
ordered: <boolean>
}
)
Parameter | Type | Description |
---|---|---|
document | document or array | 要插入到集合中的文档或文档数组 |
writeConcern | document | |
ordered | bolean | 如果为真,则按顺序插入数组中的文档,如果其中一个文档出现错误,MongoDB将返回而不处理数组中的其余文档。如果为假,则执行无序插入,如果其中一个文档出现错误,则继续处理数组中的主文档。2.6+默认为true |
【示例】
向comment的集合中插入一条测试数据
> db.comment.insert({"articleId": 10000, "content": "今天天气真好,阳光明媚", "userId": 1001, "nickname": "Rose", "createdatetime": new Date(), "lukenum": NumberInt(10), "state": null})
WriteResult({ "nInserted" : 1 })
批量插入
语法:
db.collection.insertMany(
[<document 1>, <document 2>, ...]
{
writeConcern: <document>,
ordered: <boolean>
}
)
文档的基本查询
查询数据的语法格式如下:
db.collection.find(<query>, [projection])
参数:
Parameter | Type | Description |
---|---|---|
query | document | |
projection | document |
【实例】
查询所有
> db.comment.find()
> db.comment.find({})
这里你会发现每条文档都会有一个_id字段,这个相当于我们原来关系型数据表的主键。当你插入文档记录时没后指定该字段,MongoDB会自动创建,类型为ObjectId。
如果我们在插入文档记录时指定该字段也可以,其类型可以时ObjectID类型,也可以是MongoDB支持的任意类型。
如果我想按一定条件来查询,比如我想查询userid为1003的记录。
> db.comment.find({userid: '1003'})
如果你只需要返回符合条件的第一条数据,我们可以使用findOne命令来实现,语法和find一样。
> db.comment.findOne()
> db.comment.findOne({userid: 10003})
投影查询
如果要查询结果返回部分字段,则需要使用投影查询(不显示所有字段,只显示指定的字段)
文档的更新
主要关注前四个参数即可
【实例】
覆盖的修改
> db.comment.update({_id: 1}, {likenum: NUmberInt(1001)})
执行后发现,这条文档除了likenum其它字段都没有了
局部修改
我们使用修改器$set来实现
> db.comment.update({_id: 1}, {$set:{likenum: NUmberInt(1001)}})
批量修改
// 默认值修改第一条数据
> db.comment.update({_id: 1}, {$set:{likenum: NUmberInt(1001)}})
// 修改所有符合条件的数据
> db.comment.update({_id: 1}, {$set:{likenum: NUmberInt(1001)}}, {mutli: true})
新版本支持updateMany()
删除文档
删除文档语法结构:
db.collection.remove()
将数据全部删除
db.collection.remove({})
删除_id=1的记录
db.collection.remove({_id: "1"})
文档的分页查询
统计查询
统计查询使用count()方法,语法如下:
db.collection.count(query, options)
参数:
Parameter | Type | Description |
---|---|---|
query | document | 查询选择条件 |
options | document | 可选。用于修改计数的外选项 |
分页列表查询
可以使用limit方法来读取指定数量的数据,使用skip()方法来跳过指定数量的数据。
基本语法如下所示:
> db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)
排序查询
sort()方法对数据进行排序,sort()方法可以通过参数指定排序的字段,并使用1和-1指定排序的方式,其中1为升序排列,而-1是用于降序排列。
语法如下所示:
db.COLLECTION.find().sort({key:1})
skip、limit、sort放在一起执行的时候,执行的顺序是sort、skip、limit,和命令编写顺序无关
文档的更多查询
正则的复杂条件查询
MongoDB的模糊查询是通过正则表达式的方式实现的,格式为:
db.COLLECTION.find({fields: /正则表达式/})
比较查询
db.COLLECTION.find({fields: {$gt: value}})
db.COLLECTION.find({fields: {$lt: value}})
db.COLLECTION.find({fields: {$gte: value}})
db.COLLECTION.find({fields: {$gte: value}})
db.COLLECTION.find({fields: {$ne: value}})
包含查询
包含 $in
不包含 $nin
条件查询
我们如果需要查询同时满足两个以上条件,需要使用$and操作符将条件进行关联。
格式为:
$and: [{}, {}, {}]
如果两个以上条件之间是或者的关系,我们使用操作符$or
格式为:
$or: [{},{},{}]