从mongoose中的mongodb数组中删除一个项目

时间:2014-06-18 14:05:58

标签: node.js mongodb mongoose

文档:

{
    "_id" : ObjectId("5399ba7f8035beb2d4717cc0"),
    "listName" : "firstList",
    "items" : [
        {
            "pName" : "iPad ",
            "pDesc" : "iPad aiiir",
            "ownerID" : ObjectId("5399b596c501732dd4d13923"),
            "_id" : ObjectId("5399e2cc2d7b0349d89d2b44"),
            "dateAdded" : ISODate("2014-06-12T17:26:36.282Z")
        },
        {
            "pName" : "iPhone ",
            "pDesc" : "5s",
            "ownerID" : ObjectId("5399b596c501732dd4d13923"),
            "_id" : ObjectId("5399e2cc2d7b0349d89d2b44"),
            "dateAdded" : ISODate("2014-06-12T17:26:36.282Z")
        }
]}

我想删除"数组中的项目"项目不知道文档的_id只有元素的id, 我有这个查询找到该元素,它在mongodb shell中工作但不在mongoose中,

db.lists.find( {items:
               {$elemMatch:{'_id':ObjectId("5399b596c501732dd4d13923")}}} , 
               {"items.$":1});

你知道为什么吗?

你能告诉我猫鼬的等价物吗?

我应该如何从列表中提取项目,只知道它的_id?

2 个答案:

答案 0 :(得分:4)

这应该可以解决问题:

db.lists.update(
    {}, 
    { $pull: {"items": {"_id" :ObjectId("5399e2cc2d7b0349d89d2b44") }},
    { multi: true }})

对于集合中的每个文档({}表示空查询),它会使用提供的_id(在items数组中)删除每个项目。如果没有multi选项,则只会找到找到的第一个文档

答案 1 :(得分:1)

好的,所以我找到了我的问题的猫鼬解决方案,感谢Yves Amsellem。 他的答案的猫鼬版本是:

    Lists.update(
                 {}, 
                 {$pull: {items: {_id: iProductId}}},  
                 { multi: true },
                 function(err, data){
                      console.log(err, data);
                 }
    );