文档:
{
"_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});
你知道为什么吗?
你能告诉我猫鼬的等价物吗?我应该如何从列表中提取项目,只知道它的_id?
答案 0 :(得分:4)
这应该可以解决问题:
db.lists.update(
{},
{ $pull: {"items": {"_id" :ObjectId("5399e2cc2d7b0349d89d2b44") }},
{ multi: true }})
对于集合中的每个文档({}
表示空查询),它会使用提供的_id
(在items
数组中)删除每个项目。如果没有multi
选项,则只会找到找到的第一个文档
答案 1 :(得分:1)
好的,所以我找到了我的问题的猫鼬解决方案,感谢Yves Amsellem。 他的答案的猫鼬版本是:
Lists.update(
{},
{$pull: {items: {_id: iProductId}}},
{ multi: true },
function(err, data){
console.log(err, data);
}
);