1. 程式人生 > >MongoDB學習(操作集合中的文檔)

MongoDB學習(操作集合中的文檔)

closed rto 添加多個 lap 基本 timestamp upsert _id image

文檔概念

  文檔的數據結構和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({})

MongoDB學習(操作集合中的文檔)