Mongodb在UPDATE操作中使用$pull的操作方法
本文基于Mongodb的官方文檔,介紹使用$pull, 按照指定條件刪除數(shù)組中的元素。
定義
在UPDATE中使用$pull操作符,刪除數(shù)組中的指定元素或刪除符合條件的數(shù)組元素。
語(yǔ)法
在UPDATE操作中使用$pull操作符時(shí),按照下面的語(yǔ)法。
{$pull: {<field1>: <value|condition>, <field2>: <value|condition>, ...}}
刪除嵌入文檔或數(shù)組當(dāng)中的數(shù)組元素時(shí),需要使用點(diǎn)操作符。
行為
- 自mongodb5.0開(kāi)始,UPDATE操作按照字段名稱的字典順序更新字段。當(dāng)字段中包含數(shù)字時(shí),按照數(shù)字順序依次更新字段。當(dāng)然,對(duì)一個(gè)文檔的多個(gè)字段操作,是原子性的。
- 當(dāng)在嵌入文檔數(shù)組類型的數(shù)組指定一個(gè)刪除條件時(shí),$pull操作符的刪除條件類似于集合中的文檔查詢條件一樣查詢出數(shù)組中的每一個(gè)文檔元素。
- 當(dāng)指定刪除的值是數(shù)組時(shí),指定的數(shù)組必須嚴(yán)格等于刪除字段中數(shù)組元素,包括數(shù)組元素的順序。
- 當(dāng)指定刪除的值是文檔時(shí),要求文檔中的字段和即將刪除元素文檔中的字段和值相同,字段順序可以不一致。
- mongodb 5.0版本以后,向$pull傳入空表達(dá)式({ })時(shí),mongodb不再拋出錯(cuò)誤。空表達(dá)式不會(huì)修改字段值 ,也不會(huì)在oplog中,添加新的操作記錄。
應(yīng)用
刪除數(shù)組當(dāng)中與指定值相等的元素
創(chuàng)建stores集合
db.stores.insertMany([ { _id:1, fruits: ["apples", "pears", "oranges", "grapes", "bananas"], vegetables: ["carrots", "celery", "squash", "carrots"] }, { _id:2, fruits: ["plums", "kiwis", "oranges", "bananas", "apples"], vegetables: ["broccoli", "zucchini", "carrots", "onions"] } ])
構(gòu)建數(shù)據(jù)更新語(yǔ)句,刪除fruits數(shù)組中的元素"apples", "oranges",刪除vegetables數(shù)組中的元素"carrots"
db.stores.updateMany({},{$pull:{fruits:{$in: ["apples", "oranges"]}, vegetables: "carrots"}})
查詢數(shù)據(jù)更新后的結(jié)果
刪除數(shù)組中符合查詢條件的元素
創(chuàng)建集合profile,其中votes是數(shù)組類型字段
db.profile.insertOne({_id: 1, votes:[3,5,6,7,7,8]})
構(gòu)建數(shù)據(jù)更新語(yǔ)句,刪除votes字段中大于等于6的數(shù)據(jù)。
db.profile.updateOne({_id: 1}, {$pull: {votes: {$gte: 6}}})
查詢操作結(jié)果
使用bulkWrite()方法完成數(shù)組元素刪除操作
構(gòu)建一個(gè)bulkWrite操作過(guò)程,完成下面幾個(gè)步驟
- 向集合中插入數(shù)據(jù),其中字段votes是數(shù)組字段
- 更新插入的數(shù)據(jù),刪除大于等于6的元素
- 更新插入的數(shù)據(jù),刪除小于等于3的元素
try{ db.profileBulkWrite.bulkWrite([ { insertOne: { "document": {_id: 1, votes: [3,5,6,7,7,8]} } }, { updateOne: { "filter": {_id: 1}, "update": {$pull: {votes: {$gte: 6}}} } }, { updateOne: { "filter": {_id: 1}, "update": {$pull: {votes: {$lte: 3}}} } } ]) } catch (error){ print(error) }
查詢bulkWrite()操作結(jié)果
db.profileBulkWrite.find()
刪除數(shù)組中的文檔
創(chuàng)建survey并插入數(shù)據(jù),其中results字段是文檔數(shù)組類型
db.survey.insertMany([ {_id: 1, results: [{item: "A", score: 5}, {item: "B", score: 8}]}, {_id: 2, results: [{item: "C", score: 8}, {item: "B", score: 4}]} ])
構(gòu)架數(shù)據(jù)更新語(yǔ)句,刪除results數(shù)組中score字段是8,item字段是B的文檔。
db.survey.updateMany({},{$pull: {results: {score: 8, item: "B"}}})
刪除嵌套數(shù)組中的文檔
創(chuàng)建survey文檔并插入數(shù)據(jù)
db.survey.insertMany([ {_id: 1, results: [ {item: "A", score: 5, answers:[{q:1, a:4}, {q:2, a:6}]}, {item: "B", score: 8, answers:[{q:1, a:8}, {q:2, a:9}]} ]}, {_id: 2, results: [ {item: "C", score: 8, answers:[{q:1, a:8}, {q:2, a:7}]}, {item: "B", score: 4, answers:[{q:1, a:0}, {q:2, a:8}]} ]} ])
構(gòu)建數(shù)據(jù)更新語(yǔ)句,將包含q的值為2, a的值大于等于8的文檔從results數(shù)組中刪除
db.survey.updateMany({},{ $pull: { "results": { answers: { $elemMatch: { q: 2, a: { $gte: 8 } } } } } })
到此這篇關(guān)于Mongodb在UPDATE操作中使用$pull的操作方法的文章就介紹到這了,更多相關(guān)Mongodb使用$pull操作內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
windows與mac安裝mongodb數(shù)據(jù)庫(kù)的方法步驟與注意事項(xiàng)
今天小編就為大家分享一篇關(guān)于windows與mac安裝mongodb數(shù)據(jù)庫(kù)的方法步驟與注意事項(xiàng),小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-03-03MongoDB數(shù)據(jù)庫(kù)類replace替換字符串指定內(nèi)容
mongoDB是沒(méi)有定義replace函數(shù)的,那么如果有需求需要替換nongo中數(shù)據(jù)的某一部分,怎么辦?下面這篇文章主要給大家介紹了關(guān)于MongoDB數(shù)據(jù)庫(kù)類replace替換字符串指定內(nèi)容的相關(guān)資料,需要的朋友可以參考下2023-05-05MongoDB數(shù)據(jù)庫(kù)兩階段提交實(shí)現(xiàn)事務(wù)的方法詳解
這篇文章主要介紹了MongoDB數(shù)據(jù)庫(kù)兩階段提交實(shí)現(xiàn)事務(wù)的方法,結(jié)合實(shí)例形式詳細(xì)分析了MongoDB數(shù)據(jù)庫(kù)事務(wù)提交、回滾、撤銷等操作的原理、實(shí)現(xiàn)方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2018-08-08MongoDB數(shù)據(jù)庫(kù)部署環(huán)境準(zhǔn)備及使用介紹
這篇文章主要為大家介紹了MongoDB數(shù)據(jù)庫(kù)部署環(huán)境準(zhǔn)備以及基本的使用介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-03-03MongoDB快速入門筆記(一)之windows下安裝MongoDB方法
MongoDB 是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫(kù)。由 C++ 語(yǔ)言編寫(xiě)。本文重點(diǎn)給大家介紹MongoDB快速入門筆記(一)之windows下安裝MongoDB方法,非常不錯(cuò)具有參考借鑒價(jià)值,感興趣的朋友一起看下吧2016-06-06