1.文档是什么?
文档是MongoDB中的数据基本单元,它以BSON(类似JSON)格式存放在集合中。文档类似于关系型数据库中表的记录。
每个文档都有一个特殊的键"_id",它在文档所处的集合中是唯一的。
2.文档相关CURD
以下命令均以user
集合为例
- 写入文档
db.user.insert({ "name" : "tom", "age" : 12 })
db.user.save({ "name" : "tom", "age" : 12 })
- 查询文档(更多查询方式见
文档查询
这一篇,这里不一一展开)
db.user.find()
- 更新文档
save() 更新指定_id的文档
db.user.save({"name":"tom","_id":ObjectId("5ae2983e9e56c4bf8d07e97f")})
update() 按条件更新文档(更多文档修改相关内容见文档修改
这一篇)
# 语法
db.collection_name.update(
查询条件,
整个文档或修改器,
upsert: 不存在匹配的文档时是否写入新文档,默认false(可选)
multi: 是否更新匹配的全部文档,默认false,此参数为true时第二个参数必须使用修改器(可选)
)
# 示例
db.user.update({"name":"tom"},{"name":"jack","age":12,"sex":"男"})
db.user.update({"name":"tom"},{"name":"jack","age":12,"sex":"男"},true)
db.user.update({"name":"tom"},{$set:{"name":"jack","age":12,"sex":"男"}},true,true,WriteConcern.SAFE)
db.user.update({"name":"tom"},{$set:{"name":"jack","age":12,"sex":"男"}},{multi:true})
- 删除文档
# 语法
db.collection_name.remove(
查询条件,
justOne: 匹配到多个文档时是否只删除一个文档,默认false (可选)
writeConcern: 异常级别(可选)
)
# 示例
# 删除指定_id的文档
db.user.remove({"_id":ObjectId("5ae2983e9e56c4bf8d07e97f")}
# 删除指定属性的文档,匹配多个文档时只删除一个文档
db.user.remove({"name":"tom"},true)
# 删除指定属性的文档,匹配多个文档时只删除一个文档,并指定写操作的异常级别
db.user.remove({"name":"tom"},true,WriteConcern.NORMAL)
- 更新或删除并返回文档
# 语法
db.collection.findAndModify({
query: <document>, # 查询条件
sort: <document>, # 排序,只会更新会删除匹配到的第一个文档,如{"age":-1}表示按年龄倒序,{"age":1}表示按年龄正序
remove: <boolean>, # 是否删除,不能与update参数同时存在
update: <document>, # 整个文档或修改器,不能与remove参数同时存在
new: <boolean>, # 是否返回更新后的文档,默认为false,仅与update配合使用
fields: <document>,
upsert: <boolean>, # 不存在匹配的文档时是否写入新文档,默认false
bypassDocumentValidation: <boolean>,
writeConcern: <document>,
collation: <document>,
arrayFilters: [ <filterdocument1>, ... ]
});
# 示例
db.user.findAndModify({query:{"name":"tom"},update:{"name":"tom","age":13},sort:{"age":-1},new:true})
db.user.findAndModify({query:{"name":"tom"},remove:true})
- 查询满足条件的文档数量
db.user.count({"name":"jack"})
5.update修改器
6.聚合
原生聚合运算
聚合管道
7.写操作异常级别
- WriteConcern.NONE 无异常抛出
- WriteConcern.NORMAL 仅抛出网络错误异常,没有服务器错误异常(默认)
- WriteConcern.SAFE 抛出网络错误异常、服务器错误异常;并等待服务器完成写操作
- WriteConcern.MAJORITY 抛出网络错误异常、服务器错误异常;并等待一个主服务器完成写操作
- WriteConcern.FSYNC_SAFE 抛出网络错误异常、服务器错误异常;并等待服务器将写操作刷新到磁盘
- WriteConcern.JOURNAL_SAFE 抛出网络错误异常、服务器错误异常;并等待服务器将写操作提交到磁盘的日志文件
- WriteConcern.REPLICAS_SAFE 抛出网络错误异常、服务器错误异常;并等待至少2台服务器完成写操作`
网友评论