1.文檔是什么?
文檔是MongoDB中的數(shù)據(jù)基本單元,它以BSON(類似JSON)格式存放在集合中。文檔類似于關(guān)系型數(shù)據(jù)庫中表的記錄。
每個文檔都有一個特殊的鍵"_id",它在文檔所處的集合中是唯一的。
2.文檔相關(guān)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() 按條件更新文檔(更多文檔修改相關(guān)內(nèi)容見文檔修改這一篇)
# 語法
db.collection_name.update(
查詢條件,
整個文檔或修改器,
upsert: 不存在匹配的文檔時是否寫入新文檔,默認(rèn)false(可選)
multi: 是否更新匹配的全部文檔,默認(rèn)false,此參數(shù)為true時第二個參數(shù)必須使用修改器(可選)
)
# 示例
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: 匹配到多個文檔時是否只刪除一個文檔,默認(rèn)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參數(shù)同時存在
update: <document>, # 整個文檔或修改器,不能與remove參數(shù)同時存在
new: <boolean>, # 是否返回更新后的文檔,默認(rèn)為false,僅與update配合使用
fields: <document>,
upsert: <boolean>, # 不存在匹配的文檔時是否寫入新文檔,默認(rèn)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})
- 查詢滿足條件的文檔數(shù)量
db.user.count({"name":"jack"})
5.update修改器
6.聚合
原生聚合運算
聚合管道
7.寫操作異常級別
- WriteConcern.NONE 無異常拋出
- WriteConcern.NORMAL 僅拋出網(wǎng)絡(luò)錯誤異常,沒有服務(wù)器錯誤異常(默認(rèn))
- WriteConcern.SAFE 拋出網(wǎng)絡(luò)錯誤異常、服務(wù)器錯誤異常;并等待服務(wù)器完成寫操作
- WriteConcern.MAJORITY 拋出網(wǎng)絡(luò)錯誤異常、服務(wù)器錯誤異常;并等待一個主服務(wù)器完成寫操作
- WriteConcern.FSYNC_SAFE 拋出網(wǎng)絡(luò)錯誤異常、服務(wù)器錯誤異常;并等待服務(wù)器將寫操作刷新到磁盤
- WriteConcern.JOURNAL_SAFE 拋出網(wǎng)絡(luò)錯誤異常、服務(wù)器錯誤異常;并等待服務(wù)器將寫操作提交到磁盤的日志文件
- WriteConcern.REPLICAS_SAFE 拋出網(wǎng)絡(luò)錯誤異常、服務(wù)器錯誤異常;并等待至少2臺服務(wù)器完成寫操作`