2017-01-02 231 views
0

這是我的第一個Web應用程序,我需要刪除一個嵌套的數組項。你會如何刪除貓鼬的對象與此模式:如何從Mongoose中的數組中刪除嵌套的對象

User: { 
    event: [{_id:12345, title: "this"},{_id:12346, title:"that"}] 
} 

我怎麼能去的貓鼬/蒙戈刪除id:12346

回答

2

使用$pull從項的數組中刪除的項目,如以下:

db.User.update(
    { }, 
    { $pull: { event: { _id: 12346 } } } 
) 

的$拉操作者從現有陣列刪除一個 值或匹配指定條件的值的所有實例。

第一個參數中的空對象是query來查找文檔。上述方法刪除集合中所有文檔中數組中_id: 12345的項目。

db.User.update(
    { }, 
    { $pull: { event: { _id: 12346 } } }, 
    { multi: true} 
) 
+0

如果我正在閱讀此權限,它將搜索「event {_id:123456)」的所有內容並將其刪除,更正?如果需要,我可以通過在第一個條件中添加一個ID來刪除一個實例,對嗎? – illcrx

+0

它將在集合'User'中的所有文檔中的'event'數組中刪除所有'_'項,其中'_id:123456'。如果你想刪除所有匹配的文件,你可以使用'remove'方法 – superUser

+0

'$ pull'將刪除現有數組中的特定值,而不是與條件匹配的整個文檔。如果要刪除與條件匹配的整個文檔,請使用'db.collection.remove' – superUser

1

Findone將搜索ID,如果沒有找到,那麼犯錯,否則將刪除工作: 如果有,將符合條件的數組中的多個項目,如下圖所示設置multi選項設置爲true。

User.findOne({id:12346}, function (err, User) { 
     if (err) { 
      return; 
     } 
     User.remove(function (err) { 
      // if no error, your model is removed 
     }); 
    });