首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mongodb通过key-value更新嵌套数组

Mongodb通过key-value更新嵌套数组
EN

Stack Overflow用户
提问于 2020-07-07 20:41:48
回答 1查看 66关注 0票数 0

如何通过列表键值更新嵌套数组?

代码语言:javascript
复制
{
    "_id": "mainId",
    "events": [{
            "id": 1,
            "profile": 10,
        } {
            "id": 2,
            "profile": 10,
        } {
            "id": 3,
            "profile": 20,
        }
    ]
}

我有一个列表需要更新:

代码语言:javascript
复制
var list = {id: 2, newval: 222}, {id: 3, newval: 333}

如何在一个查询中执行更新?或者在MongoDB中,它会像一个循环?

代码语言:javascript
复制
for({id, val} in list){
     update({_id: "mainId", events.$.id: id}, {setField: {events.$.profile: val}})
}
EN

回答 1

Stack Overflow用户

发布于 2020-07-07 21:34:50

如果您有events数组的副本,则可以在代码中进行必要的更新,然后在单个查询中将更新后的数组发送到MongoDB。像这样的东西

代码语言:javascript
复制
db.Test.updateOne({_id: "mainId"}, {$set: { "events": [{id: 1, profile: 222}, {id: 2, profile: 10}, {id: 3, profile: 333}] } } )

如果您没有事件数组的副本,则可以执行批量操作。就像这样

代码语言:javascript
复制
db.Test.bulkWrite(
  [

     { updateOne : {
        "filter": {_id: "mainId", "events.id": 1}, 
        "update": { $set: { "events.$.profile": 222 } }
     }
     },
     { updateOne : {
        "filter": {_id: "mainId", "events.id": 3}, 
        "update": { $set: { "events.$.profile": 333 }}
     }
     }
  ]
)

有关bulkWrite的更多信息,请参阅MongoDB文档:https://docs.mongodb.com/manual/core/bulk-write-operations/#bulkwrite-methods

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62775562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档