2017-04-22 121 views
0

我试图从mongodb集合中完全删除一个文档作为属性的文档数组。 我已经使用了$ pull和$ unset,它们通过使文档中的值成为空值,但是文档仍然存在,从而成功找到并删除了这些值。从mongodb中删除文档数组中的完整文档

如.Original文件

{ 
    _id: 6452725 gsjhye73636, 
    ItemsArray: [{ 
      _id: 757264 gsjfgs685, 
      ItemName: "item1", 
      ItemValue: "value1" 
     }, 
     { 
      _id: 757264 gsjfgs686, 
      ItemName: "item2", 
      ItemValue: "value2" 
     }, 
     { 
      _id: 757264 gsjfgs687, 
      ItemName: "item3", 
      ItemValue: "value3" 
     } 
    ], 
    OtherProp: "some value" 
} 

应用$拉动和$没有设置去除ITEM2文档后。

{ 
    _id: 6452725 gsjhye73636, 
    ItemsArray: [{ 
      _id: 757264 gsjfgs685, 
      ItemName: "item1", 
      ItemValue: "value1" 
     }, 
     { 
      _id: 757264 gsjfgs686, 
      ItemName: null, 
      ItemValue: null 
     }, 
     { 
      _id: 757264 gsjfgs687, 
      ItemName: "item3", 
      ItemValue: "value3" 
     } 
    ], 
    OtherProp: "some value" 
} 

我想是这样的:

{ 
    _id: 6452725 gsjhye73636, 
    ItemsArray: [{ 
      _id: 757264 gsjfgs685, 
      ItemName: "item1", 
      ItemValue: "value1" 
     }, 
     { 
      _id: 757264 gsjfgs687, 
      ItemName: "item3", 
      ItemValue: "value3" 
     } 
    ], 
    OtherProp: "some value" 

}

+0

的[使用MongoDB的$拉要删除阵列中的文档]可能的复制(http://stackoverflow.com/questions/15121758/using-mongodb -pull-to-delete-documents-within-an-an-array) – Veeram

回答

0

有一个在官方文档的结尾$pull操作非常简便的事例。

对于你的情况,查询将是:

db.mycol.update({}, 
       {$pull: {"ItemsArray": {"ItemName": "item2"}}} 
       ) 
+0

但是我只是itemid文件的_id而不是item2的实际值。 – Nikhil

+0

你有没有试过把'_id'传递给'$ pull'运算符? – Veeram

+0

谢谢:)它的工作! – Nikhil