MongoDB使用$addToSet向數(shù)組中添加元素的操作代碼
定義
使用方法$addToSet, 向數(shù)組中添加不存在的元素。如果元素已經(jīng)存在于目標(biāo)數(shù)組當(dāng)中,則使用$addToSet不會(huì)更新當(dāng)前文檔。
語(yǔ)法
按照下面的形式使用$addToSet操作符。
{$addToSet: {<field1>: <value1>, ...}}
當(dāng)向嵌入文檔或數(shù)組中添加元素時(shí),使用點(diǎn)操作符。
行為
- 自mongodb5.0開始,UPDATE操作按照字段名稱的字典順序更新字段。當(dāng)字段中包含數(shù)字時(shí),按照數(shù)字順序依次更新字段。當(dāng)然,對(duì)一個(gè)文檔的多個(gè)字段操作,是原子性的。
- $addToSet只能保證不會(huì)向數(shù)組當(dāng)中插入已經(jīng)存在的數(shù)據(jù)。而不會(huì)對(duì)數(shù)組中已經(jīng)存在的重復(fù)元素產(chǎn)生影響。也不會(huì)對(duì)數(shù)組中元素的順序產(chǎn)生影響。
- mongodb 5.0版本以后,向$addToSet傳入空表達(dá)式({ })時(shí),mongodb不再拋出錯(cuò)誤??毡磉_(dá)式不會(huì)修改字段值 ,也不會(huì)在oplog中,添加新的操作記錄。
- 使用$addToSet向不存在的數(shù)組字段添加數(shù)組元素時(shí),mongodb會(huì)創(chuàng)建該字段并將元素插入到該字段當(dāng)中。
- 不可以向非數(shù)組字段插入元素,否則會(huì)報(bào)錯(cuò)。
- 向數(shù)組字段插入的是一個(gè)數(shù)組時(shí),$addToSet方法將指定的數(shù)組作為一個(gè)元素插入到數(shù)組當(dāng)中。
- 向數(shù)組字段插入文檔時(shí),mongodb會(huì)判斷即將插入的文檔與數(shù)組當(dāng)中已有的元素是否嚴(yán)格相等。包括字段名稱,字段值,字段順序等。
應(yīng)用
向非數(shù)組字段插入數(shù)據(jù)報(bào)錯(cuò)
創(chuàng)建pigments集合并插入數(shù)據(jù)
db.pigments.insertOne({_id: 1, colors: "blue, green, red"})
使用$addToSet向colors字段插入數(shù)組元素
db.pigments.updateOne({_id:1}, {$addToSet: {"colors": "mauve"}}) WriteError({ "index" : 0, "code" : 2, "errmsg" : "Cannot apply $addToSet to non-array field. Field named 'colors' has non-array type string", "op" : { "q" : { "_id" : 1 }, "u" : { "$addToSet" : { "colors" : "mauve" } }, "multi" : false, "upsert" : false } })
向數(shù)組字段插入數(shù)組
創(chuàng)建集合alphabet
db.alphabet.insertOne({_id: 1, letters: ["a", "b"]})
向letters字段,插入數(shù)組["c", "d"]
db.alphabet.updateOne({_id: 1}, {$addToSet:{"letters": ["c", "d"]}})
查看插入結(jié)果
db.alphabet.find() { "_id" : 1, "letters" : [ "a", "b", [ "c", "d" ] ] }
將數(shù)組作為一個(gè)整體插入到數(shù)組letters中。若期望將數(shù)組["c", "d"]的每一個(gè)元素插入字段letters中,使用$each操作符。
db.alphabet.updateOne({_id:1}, {$addToSet: {"letters":{$each: ["c", "d"]}}})
向數(shù)組字段中插入數(shù)據(jù)
創(chuàng)建集合inventory并插入數(shù)據(jù)
db.inventory.insertOne( {_id:1, item: "polarizing_filter", tags: ["electronics", "camera"]} )
向字段tags插入元素
db.inventory.updateOne( {_id:1}, {$addToSet: {tags: "accessories"}} )
查詢插入結(jié)果
向數(shù)組中插入已存在的元素
db.inventory.updateOne( {_id:1}, {$addToSet: {tags: "camera"}} )
因?yàn)?quot;camera"已經(jīng)存在于數(shù)組tags當(dāng)中,所以沒有數(shù)據(jù)更新。
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 0 }
以上就是MongoDB使用$addToSet向數(shù)組中添加元素的操作代碼的詳細(xì)內(nèi)容,更多關(guān)于MongoDB $addToSet添加元素的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Mongodb設(shè)置TTL索引自動(dòng)清除數(shù)據(jù)與過期數(shù)據(jù)的方法
今天小編就為大家分享一篇關(guān)于Mongodb設(shè)置TTL索引自動(dòng)清除數(shù)據(jù)與過期數(shù)據(jù)的方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-03-03MongoDB自動(dòng)刪除過期數(shù)據(jù)的方法(TTL索引)
這篇文章主要給大家介紹了關(guān)于MongoDB自動(dòng)刪除過期數(shù)據(jù)(TTL索引)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-11-11MongoDB憑什么躋身數(shù)據(jù)庫(kù)排行前五
MongoDB以比去年同期超出65.96分的成績(jī)繼續(xù)雄踞榜單前五,這個(gè)增幅在全榜僅次于PostgreSQL的77.99,而其相對(duì)于4月份的6.10分的增長(zhǎng)也是僅次于微軟SQL Server排名全榜第二2019-06-06MongoDB性能篇之創(chuàng)建索引,組合索引,唯一索引,刪除索引和explain執(zhí)行計(jì)劃
這篇文章主要介紹了MongoDB性能篇之創(chuàng)建索引,組合索引,唯一索引,刪除索引和explain執(zhí)行計(jì)劃的相關(guān)資料,需要的朋友可以參考下2016-02-02mongodb使用docker搭建replicaSet集群與變更監(jiān)聽(最新推薦)
replicaSet和cluster從部署難度相比,replicaSet要簡(jiǎn)單許多。如果所存儲(chǔ)的數(shù)據(jù)量規(guī)模不算太大的情況下,那么使用replicaSet方式部署mongodb是一個(gè)不錯(cuò)的選擇,這篇文章主要介紹了mongodb使用docker搭建replicaSet集群與變更監(jiān)聽,需要的朋友可以參考下2023-03-03Navicat遠(yuǎn)程連接MongoDB最全實(shí)現(xiàn)方法以及報(bào)錯(cuò)解決
這篇文章主要給大家介紹了關(guān)于Navicat遠(yuǎn)程連接MongoDB最全實(shí)現(xiàn)方法以及報(bào)錯(cuò)解決的相關(guān)資料,文中通過圖文將實(shí)現(xiàn)的步驟一步步介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用MongoDB具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2023-03-03mongodb數(shù)據(jù)庫(kù)游標(biāo)的使用淺析
這篇文章主要介紹了mongodb數(shù)據(jù)庫(kù)游標(biāo)的使用,需要的朋友可以參考下2014-07-07分布式文檔存儲(chǔ)數(shù)據(jù)庫(kù)之MongoDB備份與恢復(fù)的實(shí)踐詳解
這篇文章主要介紹了分布式文檔存儲(chǔ)數(shù)據(jù)庫(kù)之MongoDB備份與恢復(fù),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11