2017-04-22 165 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