MongoDB對Document(文檔)的插入、刪除及更新

一.Document數據插入

1.插入文檔

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

2.批量插入文檔

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

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

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

3.Save操作

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

例子:

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

二.Document數據刪除

1.刪除列表中所有數據

db.[文檔名].remove({})

集合的本身和索引不會別刪除

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

2.根據條件刪除

例: 刪除_id為10的那條記錄

三.Document數據更新

1.直接覆蓋更新

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

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

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

例:更新_id為9,那個學生,把Name變成age

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

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

的記錄,所以會報錯。

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

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

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

例:更新一個_id為10的數據,沒有就插入,有就更新

3.批量更新操作

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

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

先修改一下數據如下:

讓_id為9和10的數據,有相同的內容

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

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

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

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

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

修正插入語句

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

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

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

{$set:{field:value}}

_id為10的數據,沒有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當中輸入如下命令:

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

到此這篇關於MongoDB操作Document的文章就介紹到這瞭。希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。

推薦閱讀: