MongoDB的Document操作


簡介

.Document數據插入

.Document數據刪除

.Document數據更新

 

.Document數據插入

1.插入文檔

  db.[文檔名].insert({BSON數據})

2.批量插入文檔

shell當中不支持批量插入,想完成批量插入操作,可以使用shellfor循環,或者其他高級語言當中的批量操作方法

例:使用for循環插入10個學生,在學生集合當中

我使用的是2.6的版本,發現已經支持了批量插入操作。

詳見:

http://q.cnblogs.com/q/80127/

3.Save操作

save操作和insert操作的區別在於,save在遇到_id相同的插入數據時候,會覆蓋原來的,而insert會提示錯誤

例子:

insert的方法去插入一個_id相同的數據

 

 

.Document數據刪除

1.刪除列表中所有數據

   db.[文檔名].remove({}) 集合的本身和索引不會別刪除

例子:刪除列表中所有數據

2.根據條件刪除

: 刪除_id10的那條記錄    

 

三.Document數據更新

1.直接覆蓋更新

 db.[文檔名].update({查詢器},{修改器})

{查詢器}就相當於是條件

{修改器}就是你要直接覆蓋替換的BSON數據

 例:更新_id9,那個學生,把Name變成age

 

 

注意:當主鍵沖突的時候會報錯並且停止更新操作

例:我用_id8的數據,去替換_id9的記錄,因為_id8的數據已經存在,不允許有兩個主鍵為_id:8

的記錄,所以會報錯。

 

2.采用insertOrUpdate的做法進行更新

db.[文檔名].update({查詢器},{修改器},true)

后面第三個參數為true,就代表是當記錄不存在的時候,就插入一條記錄,如果存在就更新

例:更新一個_id10的數據,沒有就插入,有就更新

 

3.批量更新操作

 db.[文檔名].update({查詢器},{修改器},false, true)

※默認情況當查詢器查詢出多條數據的時候默認就修改第一條數據       

先修改一下數據如下:

_id910的數據,有相同的內容

 

 再插入一個_id=11age=20的數據

 

 第四個參數不寫的情況下去更新:

 如下:只能更新第一個age=20的數據

 

 第四個參數添加並且為true的時候,我們預期是1011都能被修正

 但是當我試圖去更新的時候,報錯了,提示說批量更新只能在有操作的時候使用

 

 修正插入語句

 這里注意$set后面要有":",而且它和它后面的修改器要被{}包起來,因為我第一次使用mongoDB所以總寫錯。

 

 4.使用修改器來完成局部更新操作 

$set 它用來指定一個鍵值對,如果存在鍵就進行修改不存在則進行添加

{$set:{field:value}}

_id10的數據,沒有Name屬性,進行了添加,有age鍵,就進行了修改

$inc

1.適用於數字類型

2.能夠對鍵對應的數字類型數值進行加減操作

{$inc:{field:value}}

給age=30的數據增加2歲,由於沒有使用批量更新參數,所以默認修正了第一條

 $unset 刪除指定的鍵

{$unset:{field:1}}

我在例子里面先是刪除了age=30的數據的age屬性,但是有一點不明白,unset后面那個field:1是什么,於是我查了一下,說是后面是什么都無所謂,unset只看鍵不看value,於是又做了第二個例子

 $push

1.如果指定的鍵是數組增追加新的數值

2.如果指定的鍵不是數組則中斷當前操作,報錯

3.如果不存在指定的鍵則創建數組類型的鍵值對

{$push:{field:value}}

$pushAll

用法同上,是批量添加數組數據的操作

{$pushAll:{field:array}}

1.第一個操作沒有用$pushAll,所以把["C#","JAVA"]當成一個數組項目處理了

2.第二個操作使用了$pushAll,所以當成了兩項來處理的。

$addToSet

往數組中添加項目,存在就不添加,不存在就添加(push不管存不存在都添加)

{$addToSet:{field:value}}

1.先用push插入,發現更新完成后有兩個“C#

2.再用addToSet更新,發現沒有增加項目

$pop

從指定數組刪除一個值1刪除最后一個數值,-1刪除第一個數值

{$pop:{field:value}}

1.刪除最后一個索引位置的數據,后面的value"1"

2.刪除第一位置索引的數據,value=-1

$pull push的逆向操作,刪除鍵是數組的項目中的指定元素

{$pull:{field:value}}

 $pullAll  批量刪除數組中的指定元素

{$pullAll:{field:array}}

 $   數組定位器,如果數組有多個數值我們只想對其中一部分進行操作我們就要用到定位器($)

 {$push:{field:value}}

1.實例第一個是在剛剛清空的數組里面添加了兩個元素

2.我想在{SubID:1,"SubName":"MangoDB"}這個對象里面再添加"Teacher":"Lucy"

5.$addToSet$each結合完成批量數組更新

理解:首先從上面的例子中我們知道,addToSet這個修改器,可以判斷是否項目存在,不存在的時候就直接插入。

此時我有一個功能,例如我想往一個存在數據的數組中批量更新數據,如果存在就不更新。那么只使用addToSet是不能進行批量的,於是就要結合$each來實現。

例:

1.新創建一個文件,並使用pushAll修改器添加數據:

2.我想要批量插入"C#","PHP","JavaScript","JAVA",要求不能有重復的

如果這時候我直接用pushAll來進行更新的話,"C#""JAVA"就會有重復

shell當中輸入如下命令:

> db.Student.update({_id:10000},{$addToSet:{Books:{$each:["C#","PHP","Javascript","JAVA"]}}})

  

總結:以上就是MongoDBDocument的插入、刪除以及更新的使用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM