mongodb對集合文檔的操作,添加文檔、查看文檔、刪除文檔、更新文檔及常用的局部更新運算符 ...
文檔概念
文檔的數據結構和JSON基本一樣。
所有存儲在集合中的數據都是BSON格式。
BSON是一種類json的一種二進位形式的存儲格式,簡稱Binary JSON。
插入文檔
insert()方法
要將數據插入到 MongoDB 集合中,可以使用 insert() 方法。
db.collection_name.insert(document)
其中test為集合名。如果資料庫中不存在集合,則MongoDB將創建此集合,並將文檔插入到該集合中。
在插入的文檔中,如果不指定 _id 參數,MongoDB會為此文檔分配一個唯一的Object_id。
_id 為集合中的每一個文檔的12個位元組的十六進位數。12 位元組劃分為:
id: ObjectId( 4 bytes timestamp, 3 bytes machine id, 2 bytes process id, 3 bytes incrementer)
要在單個語句中插入多個文檔,可以在 insert() 命令中傳遞文檔數組。
1 > db.test.insert([ 2 ... {name:"uzi", 3 ... like:["MongoDB","JAVA","Database"], 4 ... }, 5 ... {name:"957", 6 ... parents:[{ 7 ... father:"letme", 8 ... mather:"mlxg"}],}])添加代碼
save()方法
要插入文檔,也可以使用 db.collection_name.save() 方法。與 insert() 方法不同的是,當輸入的id值相同時, insert() 方法無法插入,但 save() 方法會更新包含 該 id 值的文檔的全部數據。
insertOne()方法
db.collection_name.insertOne() 方法將單個文檔插入到集合中。如果沒有指定 _id ,MongoDB會自動將添加。
該方法會返回包含新插入的文檔的 ”_id"欄位值的文檔。
insertMany()方法
db.collection_name.insertMany() 方法可以將多個文檔插入到集合中。如果沒有指定 _id,則自動添加ObjectId
更新文檔
更新運算符
在MongoDB中進行更新操作時,可以使用運算符進行文檔數據的局部修改。
運算符 | 描述 | 語法 |
$set | 更新欄位的值,如果欄位不存在則進行添加 | { $set : { field : value } } |
$inc |
將欄位值增加指定的量 |
{ $inc : { field : value } } |
$rename |
重命名欄位名(鍵名) |
{ $rename : { field : value } } |
$unset |
刪除指定的欄位(鍵) |
{ $unset : { field : "1" } } |
$setOnInsert |
在更新操作中新建文檔時設置欄位的值 |
{ $setOnInsert : { field : value } } |
$addToSet |
在已有數組中添加元素,如果元素存在則不操作 |
{ $addToSet : { field : value } } |
$pop |
刪除數組的第一個或最後一個元素。如果值為“-1",則刪除第一個元素; 如果值為”1",則刪除最後一個元素。 |
{ $pop : { field : value } } |
$push |
1.如果指定的鍵是數組則追加新的值; 2.如果指定的鍵不是數組則無法成功執行 3.如果不存在指定的欄位(鍵)則創建數組類型的鍵值對 |
{ $push : { field : value } } |
$pushAll |
用法與 $push 類似,一次可以添加多個值到數組 |
{ $pushAll : { field : [ value1,value2,...] } } |
$pull |
從數組中刪除指定值 |
{ $pull : { field : value } } |
$pullAll |
從數組中刪除多個值,要刪除的值是以數組指定的 |
{ $pullAll : { field : [ value1,value2,...] } } |
$each |
用於運算符$push和$addToSet 的限定符,用於在數組中添加多個單獨的元素,防止直接添加進數組元素 |
field : { $each : [ value1,...] } |
$slice |
用於運算符 $push 的限定符,用於限制更新後的數組長度 |
field : { $slice : < num > } |
$sort |
用於運算符 $push 的限定符,用於將數組中的文檔重新排序 |
|
$bit |
對整數值執行按位與和或運算。 |
更新方法 update()
Collection 對象的 update() 方法可以更新集合中的文檔。
db.collection.update( <query>, <update>, { upsert: <boolean>, multi: <boolean>, writeConcern: <document> } )
參數說明:
- query:查詢條件,類似sql update查詢內where後面的條件。
- update:要更新的內容和一些更新的操作符(如 $set...)等,類似sql update查詢內set後面的參數。
- upsert:可選。參數upsert是個布爾值,如果為 true 且沒有文檔與查詢匹配,則插入一個新文檔;如果為 false 則不插入。 預設為 false。
- multi:可選。mongodb 預設是false,只更新找到的第一條記錄,如果這個參數為true,就把按條件查出來的多條記錄全部更新。
- writeConcern:可選。拋出異常的級別。
註意:如果不使用運算符,則update內容不會進行局部修改,而是全局修改。
示例:
1 #將name為uzi的學生的age加5 2 db.student.update({name:"uzi"},{$inc:{age:5}}) 3 4 #把uzi的sex改為boy 5 db.student.update({name:"uzi"},{$set:{sex:"boy"}}) 6 7 #把uzi的like欄位刪除 8 db.student.update({name:"uzi"},{$unset:{like:1}}) 9 10 #給uzi的添加別名dog 11 db.student.update({name:"uzi"},{$push:{aname:"dog"}}) 12 13 #給uzi添加多個別名 14 db.student.update({name:"uzi"},{$pushAll:{aname:["A1","A2"]}}) 15 16 #給uzi的別名數組裡再添加一個數組 17 db.student.update({name:"uzi‘},{$addToSet:{aname:["A3","A4"]}}) 18 19 #刪除別名數組內第一個別名 20 db.student.update({name:"uzi"},{$pop:{aname:-1}}) 21 22 #刪除別名 A2 23 db.student.update({name:"uzi"},{$pull:{aname:"A2"}})局部更新語句示例
save() 方法
save() 方法通過傳入的文檔來替換已有文檔。語法格式如下:
db.collection.save( <document>, { writeConcern: <document> } )
- document:文檔數據
- writeConcern:可選。拋出的異常級別。
無需指定query和update對象,直接將新文檔替換掉原來的舊文檔。它通過文檔中的_id欄位確定要修改的欄位。
如果集合中沒有與傳入文檔的_id欄位值相等的文檔,則會添加新的文檔。
save() 函數的執行效率要低於update()。
查看文檔
查看集合中的文檔,可以使用find()方法。
db.collection_name.find() 可以以非結構化的方式顯示集合中的所有文檔。
db.collection_name.find().pretty() 可以以結構化的方式顯示集合中的所有文檔。
刪除文檔
remove()函數可以用來刪除集合中的文檔。
db.collection_name.remove( <query>, { justOne: <boolean>, writeConcern: <document> } )
- query:可選。刪除的文檔的條件。
- justOne:可選。如果為true 或 1,則只刪除一個文檔。預設為false。
- writeConcern:可選。拋出異常的級別。
示例:
註意:如果要刪除集合中的全部文檔,可以使用
db.collection_name.remove({})