gpt4 book ai didi

arrays - Mongodb - 更新 JSON 数组中的多个数组元素

转载 作者:可可西里 更新时间:2023-11-01 09:12:27 27 4
gpt4 key购买 nike

我有一个收藏文档,例如 .

{'_id':1,
'name':'Root',
'taskId':1,
'parentId':"",
'path':[1],
'tasks':[ {"taskId":3,parentId:1,name:'A',status:'Created'},
{"taskId":4,parentId:1,name:'D',status:'Created'},
{"taskId":5,parentId:4,name:'B',status:'Created'},
{'type':'project' , 'proRef':2},
{"taskId":6,parentId:3,name:'E',status:'Started'},
{"taskId":7,parentId:6,name:'C',status:'Stopped'}]

}

现在我想将多个数组元素字段“status”更新为 JSON 中的“Deleted”。让我们假设 taskId 3,4 我需要将状态更新为 Deleted。我已经用 $in 和 query($) 尝试过这个查询,但它正在更新第一个元素只是 $in 数组。在下面的查询中,只有 3 的 taskId 得到更新,而不是 4。

db.projectPlan.update({"_id": 1,'tasks.taskId': {$in :[3,4]}} , {$set: {'tasks.$.status': 'Deleted'}}, {upsert: false, multi: true});

如何在单个查询中更新多个元素。提前致谢!!

最佳答案

恐怕这是不可能的,这是 MongoDB 的限制。来自文档(http://docs.mongodb.org/manual/reference/operator/update-array/):

$ Acts as a placeholder to update the first element that matches the query condition in an update.

有关详细信息,请参阅此票证:https://jira.mongodb.org/browse/SERVER-1243

虽然在 MongoDB shell 中是可能的:

db.projectPlan.find({"_id": 1}).forEach(function(plan) {
plan.tasks.forEach(function(task) {
if(task.taskId in { 3: 1, 4: 1 }) {
task.status = "Deleted";
}
});
db.projectPlan.save(plan);
});

关于arrays - Mongodb - 更新 JSON 数组中的多个数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20742188/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com