首頁 > 軟體

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

2022-07-08 18:06:29

一.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的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com