Mongodb在UPDATE操作中使用$push向數(shù)組中插入數(shù)據(jù)的方法
學(xué)習(xí)mongodb,體會(huì)mongodb的每一個(gè)使用細(xì)節(jié),歡迎閱讀威贊的文章。這是威贊發(fā)布的第69篇mongodb技術(shù)文章,歡迎瀏覽本專欄威贊發(fā)布的其他文章。如果您認(rèn)為我的文章對(duì)您有幫助或者解決您的問題,歡迎在文章下面點(diǎn)個(gè)贊,或者關(guān)注威贊。謝謝。
定義
在update操作中,使用$push操作符向數(shù)組中插入新的元素。按照下面的語(yǔ)法,使用$push操作符
{$push: {<field1>: <value1>, ...}}當(dāng)向嵌入式文檔或數(shù)組中的數(shù)組字段插入元素時(shí),使用點(diǎn)操作符。
行為
- 自mongodb5.0開始,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)文章
SpringBoot整合redis及mongodb的詳細(xì)過程
這篇文章主要介紹了SpringBoot整合redis及mongodb,本節(jié)我們來把關(guān)注點(diǎn)轉(zhuǎn)向NoSQL,文章結(jié)合示例代碼給大家講解的非常詳細(xì),需要的朋友可以參考下2022-10-10
Centos7 yum安裝mongodb實(shí)現(xiàn)步驟詳解
這篇文章主要介紹了Centos7 yum安裝mongodb實(shí)現(xiàn)步驟詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
關(guān)于NoSQL之MongoDB的一些總結(jié)
這篇文章主要介紹了關(guān)于NoSQL之MongoDB的一些總結(jié)的相關(guān)資料,需要的朋友可以參考下2015-07-07
Centos系統(tǒng)搭建MongoDB數(shù)據(jù)庫(kù)
這篇文章介紹了Centos系統(tǒng)搭建MongoDB數(shù)據(jù)庫(kù)的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04
mongodb 數(shù)據(jù)庫(kù)操作詳解--創(chuàng)建,切換,刪除
mongodb是nosql里面最像關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)。單表操作,基本上可以和關(guān)系型數(shù)據(jù)庫(kù)差不多。mongodb比較易學(xué),易用,分幾期記錄一下,學(xué)習(xí)和使用mongodb過程。2014-07-07
MongoDB對(duì)數(shù)組進(jìn)行增刪改查操作
與關(guān)系型數(shù)據(jù)庫(kù)相比,MongoDB支持?jǐn)?shù)組,將數(shù)組存儲(chǔ)到文檔之中,下面這篇文章主要給大家介紹了關(guān)于MongoDB對(duì)數(shù)組進(jìn)行增刪改查操作的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05

