Mongodb在UPDATE操作中使用$push向數(shù)組中插入數(shù)據(jù)的方法
學(xué)習(xí)mongodb,體會(huì)mongodb的每一個(gè)使用細(xì)節(jié),歡迎閱讀威贊的文章。這是威贊發(fā)布的第69篇mongodb技術(shù)文章,歡迎瀏覽本專欄威贊發(fā)布的其他文章。如果您認(rèn)為我的文章對(duì)您有幫助或者解決您的問(wèn)題,歡迎在文章下面點(diǎn)個(gè)贊,或者關(guān)注威贊。謝謝。
定義
在update操作中,使用$push操作符向數(shù)組中插入新的元素。按照下面的語(yǔ)法,使用$push操作符
{$push: {<field1>: <value1>, ...}}
當(dāng)向嵌入式文檔或數(shù)組中的數(shù)組字段插入元素時(shí),使用點(diǎn)操作符。
行為
- 自mongodb5.0開(kāi)始,UPDATE操作按照字段名稱的字典順序更新字段。當(dāng)字段中包含數(shù)字時(shí),按照數(shù)字順序依次更新字段。當(dāng)然,對(duì)一個(gè)文檔的多個(gè)字段操作,是原子性的。
- 使用$push向文檔不存在的字段插入元素時(shí),update操作向文檔中插入該字段并將$push中的指定值賦給新增加的字段。
- 使用$push向非數(shù)組字段添加新的元素,數(shù)據(jù)更新操作會(huì)失敗。
- 向指定字段使用$push插入數(shù)組時(shí),Mongodb的數(shù)據(jù)更新操作將即將插入的數(shù)組作為整體,插入到目標(biāo)數(shù)組當(dāng)中。如果用戶計(jì)劃使用$push插入指定數(shù)組的每一個(gè)元素,需要使用$each操作符。
- mongodb 5.0版本以后,向$push傳入空表達(dá)式({ })時(shí),mongodb不再拋出錯(cuò)誤。空表達(dá)式不會(huì)修改字段值 ,也不會(huì)在oplog中,添加新的操作記錄。
- Mongodb提供了幾個(gè)可以與$push搭配使用的數(shù)據(jù)操作符
操作符 | 描述 |
$each | 向指定數(shù)組一次性添加多個(gè)元素 |
$slice | 限制操作數(shù)組的容量,需要和$each操作符搭配使用 |
$sort | 對(duì)指定數(shù)組進(jìn)行排序,需要和$each操作符搭配使用 |
$position | 指定新元素在數(shù)組中插入的位置,需要和$each操作符搭配使用。默認(rèn)新的元素插入到數(shù)組的結(jié)尾 |
當(dāng)執(zhí)行$push操作時(shí),當(dāng)用戶指定對(duì)數(shù)組排序或限制數(shù)組長(zhǎng)度時(shí),update按照下面的順序執(zhí)行$push操作。
應(yīng)用
創(chuàng)建students集合并插入數(shù)據(jù)
db.students.insertOne({_id:1,scores: [44,78,38,80]})
向數(shù)組中插入元素
db.students.updateOne({_id:1},{$push: {scores: 89}})
將指定數(shù)值插入多個(gè)文檔的數(shù)組字段中
向students集合插入新文檔
db.students.insertMany([ {_id:2,scores: [45,78,38,80,89]}, {_id:3,scores: [46,78,38,80,89]}, {_id:4,scores: [47,78,38,80,89]}, ])
構(gòu)建UPDATE語(yǔ)句,向students所有文檔的scores字段插入新值95
db.students.updateMany({},{$push: {scores: 95}})
向數(shù)組中插入多個(gè)數(shù)值
在$push中使用$each操作符,將多個(gè)值插入數(shù)組中。
db.students.updateOne({_id:1},{$push: {scores: {$each: [90, 92, 85]}}})
在$push操作符中使用多個(gè)數(shù)組更新操作符
向students集合中插入文檔
db.students.insertMany([ {_id:5, quizzes: [ {wk:1, score: 10}, {wk:2, score: 8}, {wk:3, score: 5}, {wk:4, score: 6} ]} ])
構(gòu)建數(shù)據(jù)更新語(yǔ)句,完成下面幾個(gè)操作
- 使用$each操作符,向quizzes字段插入多個(gè)元素
- 按照score倒序?qū)uizzes中的元素進(jìn)行排列
- 使用$slice限制quizzes數(shù)組的容量,保留排序后前面3個(gè)元素
db.students.updateOne( {_id:5}, { $push: { quizzes: { $each: [ {wk:5, score: 8}, {wk:6, score: 7}, {wk:7, score: 6} ], $sort: {score: -1}, $slice: 3 } } } )
到此這篇關(guān)于Mongodb在UPDATE操作中使用$push向數(shù)組中插入數(shù)據(jù)的方法的文章就介紹到這了,更多相關(guān)Mongodb使用$push向數(shù)組中插入數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何去掉保存mongodb數(shù)據(jù)時(shí)出現(xiàn)的_class字段
這篇文章主要給大家介紹了如何去掉保存mongodb數(shù)據(jù)時(shí)出現(xiàn)的_class字段,文中通過(guò)代碼示例給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-02-02MongoDB中javascript腳本編程簡(jiǎn)介和入門實(shí)例
作為一個(gè)數(shù)據(jù)庫(kù),MongoDB有一個(gè)很大的優(yōu)勢(shì)——它使用js管理數(shù)據(jù)庫(kù),所以也能夠使用js腳本進(jìn)行復(fù)雜的管理——這種方法非常靈活2014-04-04使用Node操作MongoDB數(shù)據(jù)庫(kù)的方法
這篇文章主要介紹了使用Node操作MongoDB數(shù)據(jù)庫(kù)的方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2018-01-01mongose 模糊檢索實(shí)現(xiàn)方法示例詳解
這篇文章主要為大家介紹了mongose 模糊檢索實(shí)現(xiàn)方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08詳解Mongodb?多文檔聚合操作處理方法(Map-reduce?函數(shù))
這篇文章主要介紹了Mongodb多文檔聚合操作處理方法(Map-reduce函數(shù)),本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07MongoDB學(xué)習(xí)之Text Search文本搜索功能
這篇文章主要給大家介紹了MongoDB之Text Search文本搜索功能的相關(guān)資料,文中給出了詳細(xì)的示例代碼供大家參考學(xué)習(xí),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-05-05基于MongoDB數(shù)據(jù)庫(kù)的數(shù)據(jù)類型和$type操作符詳解
下面小編就為大家?guī)?lái)一篇基于MongoDB數(shù)據(jù)庫(kù)的數(shù)據(jù)類型和$type操作符詳解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-07-07