【问题标题】:Remove an item from an array mongodb equivalent in mongoose从mongoose中等效的数组mongodb中删除一个项目
【发布时间】:2014-08-08 21:04:32
【问题描述】:

文档:

{
    "_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});

你知道为什么吗?

你能给我相当于 mongoose 的东西吗?

我应该如何只知道它的 _id 从列表中拉出项目?

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      这应该可以解决问题:

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

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

      【讨论】:

      • 但是由于 ObjectId 是唯一的,我真的不需要它吗?
      • 如果您在谈论multi: true,那么在您的情况下,您是对的,您不需要它
      猜你喜欢
      • 2014-09-03
      • 2016-08-03
      • 2013-06-08
      • 2021-04-01
      • 1970-01-01
      • 2020-08-31
      • 2016-03-16
      • 1970-01-01
      • 2020-03-26
      相关资源
      最近更新 更多