2017-01-02 227 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 
     }); 
    });