我在MongoDB中有一个集合。 并希望从数组中删除一个项目。
我的用户"集合是一个对象数组。
当我输入:
db.users.find({"tasks.task_id" : "h58sjIdj3jJZ"}).pretty()
在mongo shell中,我得到了这个结果:
{
"_id" : ObjectId("5955b45b7a4bf40544019359"),
"profile" : {
"name" : "Morning bay",
"email" : "morbay232@google.su",
"phone" : "+1-641-155-88-84",
"description" : "Lorem ipsum dolor sit amet, consectetur adipisicing elit"
},
"tasks" : [
{
"task_id" : "h58sjIdj3jJY",
"time" : "11:15 AM",
"date" : "07/01/2017",
"description" : "Make 1st call to John White"
},
{
"task_id" : "h58sjIdj3jJZ",
"time" : "14:30 PM",
"date" : "07/09/2017",
"description" : "Send certificate and make Another call to J.White"
}
],
"progress" : [
{
"isActive" : "",
"description" : ""
}
]
}
因此,我的收藏中的每个项目都是这样的。 没关系。
但是现在我想从"任务中删除一个项目"用户项目中的数组。
我输入:
db.users.update({}, {$pull : {"tasks" : {"task_id" : "h58sjIdj3jJZ"}}});
得到这个结果:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })
我阅读的文档和示例看起来很相似,所以我不明白哪里出错。
答案 0 :(得分:1)
您在更新搜索查询中使用{}
默认情况下表示find any document
,然后您正在修改其任务列表{$pull : {"tasks" : {"task_id" : "h58sjIdj3jJZ"}}}
。
因此,可能正在修改另一个文档(可能包含也可能不包含id h58sjIdj3jJZ
的任务,但在这种情况下,它是否具有相关性无关紧要)
您有两种选择: 使用方法:
db.users.update({}, {$pull : {"tasks" : {"task_id" : "h58sjIdj3jJZ"}}}, { multi: true });
最终会触及db中的每个文档,
OR
使搜索查询更具体(在任务中提供id或查找具有task_id的项目)
db.users.update({ "tasks.task_id": "h58sjIdj3jJZ"}, {$pull : {"tasks" : {"task_id" : "h58sjIdj3jJZ"}}});
答案 1 :(得分:0)