MongoDB如何更新多級文檔的數(shù)據(jù)
嵌套數(shù)組更新
以下面的數(shù)據(jù)(數(shù)據(jù)集名稱為author)為例:
{name: '島上碼農(nóng)', documents: ['Flutter入門與實戰(zhàn)', '高性能MySQL', 'MongoDB專業(yè)指北']}
我們需要將 MongoDB專業(yè)指北改成MongoDB不專業(yè)指北,就屬于修改嵌套的文檔數(shù)據(jù)了。這個時候需要使用到 MongoDB 提供的定位操作符$。定位操作符即表示將對應(yīng)條件匹配到的數(shù)據(jù),如:
db.author.update( {name: '島上碼農(nóng)', documents: 'MongoDB專業(yè)指北'}, {'$set': {'documents.$': 'MongoDB不專業(yè)指北'}} );
對于下級節(jié)點為數(shù)組的也是一樣。
{ name: '島上碼農(nóng)', documents: [ {name: 'Flutter入門與實戰(zhàn)', score: 80}, {name: '高性能MySQL', score: 90}, {name: 'MongoDB專業(yè)指北', score: 85} ] }
需要將 documengs 節(jié)點的 name 和 score 進行修改。
db.author.update( {name: '島上碼農(nóng)', 'documents.name': 'MongoDB專業(yè)指北'}, {'$set': { 'documents.$.name': 'MongoDB不專業(yè)指北', 'documents.$.score':88} } );
$定位操作符即在查詢條件中找到的數(shù)組中的數(shù)據(jù)元素位置,即表示操作的是該位置的數(shù)據(jù)。
更新下級文檔的屬性
更新下級文檔屬性時可以直接使用屬性訪問符“.”,例如下面需要更新 praise 增加到291。
{ name: '島上碼農(nóng)', scores: { view: 18800, praise: 290, followers: 105 } }
db.author.update( {name: '島上碼農(nóng)'}, {'$set': {'scores.praise': 291}} );
下級文檔若還存在嵌套數(shù)組也是類似的操作,如下面的數(shù)據(jù),需要將“公眾號”換成“微信公眾號”:
{ name: '島上碼農(nóng)', scores: { view: 18800, praise: 290, followers: 105, platform: ['掘金', '公眾號'] } }
db.author.update( {'name': '島上碼農(nóng)', 'scores.platform': '公眾號'}, {'$set': {'scores.platform.$':'微信公眾號'}} );
屬性增加和移除
MongoDB提供了 $push 和 $pull操作指令來增加或移除屬性,同時還提供了 $pop 來移除數(shù)組的第一個或最后一個值。我們給前一個文檔增加一個 homepage 屬性。
db.author.update( {name: '島上碼農(nóng)'}, {$push: {homepage: 'https://juejin.cn/user/70787819648695'}} );
注意的是,此時插入的是一個名為 homepage 的數(shù)組,其中的一個元素是:juejin.cn/user/707878…。如果是增加不是數(shù)組的屬性,使用$set 指令即可。 可以使用 pull 移除掉匹配的一個屬性。
db.author.update( {name: '島上碼農(nóng)'}, {$pull: {homepage: 'https://juejin.cn/user/70787819648695'}} );
$pop 操作時使用數(shù)字-1和1表示移除首尾的元素,對于下面的數(shù)據(jù),移除數(shù)組platform里的數(shù)據(jù)。
{ name: '島上碼農(nóng)', scores : { view: 18800, praise: 290, followers: 105, platform: ['掘金', '公眾號', '其他1', '其他2'] } }
// 移除第一個元素 db.author.update({name: '島上碼農(nóng)'}, {$pop: {'scores.platform': -1}}); // 移除最后一個元素 db.author.update({name: '島上碼農(nóng)'}, {$pop: {'scores.platform': 1}});
總結(jié)
本篇介紹了 MongoDB 的嵌套屬性更新操作,主要是定位操作符$的使用。通過定位符可以定位我們需要修改的數(shù)據(jù)位置,進而進行更新操作。以及屬性的添加和移除,通過$push、$pull和$pop指令即可完成響應(yīng)的操作。
以上就是MongoDB如何更新多級文檔的數(shù)據(jù)的詳細內(nèi)容,更多關(guān)于MongoDB 更新多級文檔的資料請關(guān)注本站其它相關(guān)文章!
版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。