2017-07-03 238 views
0

我在MongoDB中有一个集合。 并想从阵列中移除一个项目。

我的“用户”集合是一组对象。

当我键入:

db.users.find({"tasks.task_id" : "h58sjIdj3jJZ"}).pretty() 

在蒙戈外壳,我得到这样的结果:

{ 
    "_id" : ObjectId("5955b45b7a4bf40544019359"), 
    "profile" : { 
    "name" : "Morning bay", 
    "email" : "[email protected]", 
    "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" : "" 
    } 
    ] 
} 

所以,我的收藏中的每一项看起来是这样的。 没关系。

但是现在我想从一个用户项目中的“tasks”数组中删除一个项目。

I型:

db.users.update({}, {$pull : {"tasks" : {"task_id" : "h58sjIdj3jJZ"}}}); 

的得到这样的结果:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 }) 

我阅读文档和示例,它看起来很相似,所以我不明白的地方是一个错误。

+0

它应该工作。你的mongodb版本是什么? –

+0

你可以添加{multi:true}作为更新的第三个参数吗? 'db.users.update({},{$ pull:{“tasks”:{“task_id”:“h58sjIdj3jJZ”}}},{multi:true});' –

+0

已经尝试过了,但并没有帮助 – alexfrize

回答

1

你在更新搜索查询中使用{}通过什么手段默认find any document,然后你正在修改其任务列表{$pull : {"tasks" : {"task_id" : "h58sjIdj3jJZ"}}}

所以,可能另一个文档被修改(这可能会或可能不包含ID h58sjIdj3jJZ的任务,但在这种情况下,它无关紧要是否有与否)

你有2种选择: 使用:

db.users.update({}, {$pull : {"tasks" : {"task_id" : "h58sjIdj3jJZ"}}}, { multi: true });

什么最终接触以dB为单位的每个文档,

OR

使搜索查询更具体的(提供身份证或任务寻找项目与TASK_ID)

db.users.update({ "tasks.task_id": "h58sjIdj3jJZ"}, {$pull : {"tasks" : {"task_id" : "h58sjIdj3jJZ"}}});

+1

是的!我用'db.users.update({“tasks.task_id”:“h58sjIdj3jJZ”},{$ pull:{“tasks”:{“task_id”:“h58sjIdj3jJZ”}}})'并且它有帮助!谢谢! – alexfrize

0

我在MongoDB终端在线测试了它,并且您的查询正确地拉取了文档。

这是output

您是否遇到过shell或使用ODM(如Mongoose)的问题?

+0

我使用MongoJS而不是Mongoose。是的,有同样的问题。它不会从任务数组中删除项目。 – alexfrize

相关问题