MongoDB使用$addToSet向數(shù)組中添加元素的操作代碼
定義
使用方法$addToSet, 向數(shù)組中添加不存在的元素。如果元素已經(jīng)存在于目標(biāo)數(shù)組當(dāng)中,則使用$addToSet不會更新當(dāng)前文檔。
語法
按照下面的形式使用$addToSet操作符。
{$addToSet: {<field1>: <value1>, ...}}
當(dāng)向嵌入文檔或數(shù)組中添加元素時,使用點操作符。
行為
- 自mongodb5.0開始,UPDATE操作按照字段名稱的字典順序更新字段。當(dāng)字段中包含數(shù)字時,按照數(shù)字順序依次更新字段。當(dāng)然,對一個文檔的多個字段操作,是原子性的。
- $addToSet只能保證不會向數(shù)組當(dāng)中插入已經(jīng)存在的數(shù)據(jù)。而不會對數(shù)組中已經(jīng)存在的重復(fù)元素產(chǎn)生影響。也不會對數(shù)組中元素的順序產(chǎn)生影響。
- mongodb 5.0版本以后,向$addToSet傳入空表達式({ })時,mongodb不再拋出錯誤。空表達式不會修改字段值 ,也不會在oplog中,添加新的操作記錄。
- 使用$addToSet向不存在的數(shù)組字段添加數(shù)組元素時,mongodb會創(chuàng)建該字段并將元素插入到該字段當(dāng)中。
- 不可以向非數(shù)組字段插入元素,否則會報錯。
- 向數(shù)組字段插入的是一個數(shù)組時,$addToSet方法將指定的數(shù)組作為一個元素插入到數(shù)組當(dāng)中。
- 向數(shù)組字段插入文檔時,mongodb會判斷即將插入的文檔與數(shù)組當(dāng)中已有的元素是否嚴(yán)格相等。包括字段名稱,字段值,字段順序等。
應(yīng)用
向非數(shù)組字段插入數(shù)據(jù)報錯
創(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ù)組作為一個整體插入到數(shù)組letters中。若期望將數(shù)組["c", "d"]的每一個元素插入字段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"}} )
因為"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添加元素的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Mongodb設(shè)置TTL索引自動清除數(shù)據(jù)與過期數(shù)據(jù)的方法
今天小編就為大家分享一篇關(guān)于Mongodb設(shè)置TTL索引自動清除數(shù)據(jù)與過期數(shù)據(jù)的方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-03-03MongoDB自動刪除過期數(shù)據(jù)的方法(TTL索引)
這篇文章主要給大家介紹了關(guān)于MongoDB自動刪除過期數(shù)據(jù)(TTL索引)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-11-11MongoDB性能篇之創(chuàng)建索引,組合索引,唯一索引,刪除索引和explain執(zhí)行計劃
這篇文章主要介紹了MongoDB性能篇之創(chuàng)建索引,組合索引,唯一索引,刪除索引和explain執(zhí)行計劃的相關(guān)資料,需要的朋友可以參考下2016-02-02mongodb使用docker搭建replicaSet集群與變更監(jiān)聽(最新推薦)
replicaSet和cluster從部署難度相比,replicaSet要簡單許多。如果所存儲的數(shù)據(jù)量規(guī)模不算太大的情況下,那么使用replicaSet方式部署mongodb是一個不錯的選擇,這篇文章主要介紹了mongodb使用docker搭建replicaSet集群與變更監(jiān)聽,需要的朋友可以參考下2023-03-03Navicat遠(yuǎn)程連接MongoDB最全實現(xiàn)方法以及報錯解決
這篇文章主要給大家介紹了關(guān)于Navicat遠(yuǎn)程連接MongoDB最全實現(xiàn)方法以及報錯解決的相關(guān)資料,文中通過圖文將實現(xiàn)的步驟一步步介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用MongoDB具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2023-03-03mongodb數(shù)據(jù)庫游標(biāo)的使用淺析
這篇文章主要介紹了mongodb數(shù)據(jù)庫游標(biāo)的使用,需要的朋友可以參考下2014-07-07分布式文檔存儲數(shù)據(jù)庫之MongoDB備份與恢復(fù)的實踐詳解
這篇文章主要介紹了分布式文檔存儲數(shù)據(jù)庫之MongoDB備份與恢復(fù),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-11-11