如何删除MongoDB中的嵌入式文档?
我有一个文件,看起来像这样:如何删除MongoDB中的嵌入式文档?
{listName: 'LoremIpsum'
listItems: [{productDescription: "", productImage: ""}...]}
我将如何去从listItems中删除项目,如果productImage不存在?
我已经试过没有结果如下:
db.lists.update({"item.productImage":{$exists: false}}, {$unset:{"item":1}}, false, true)
注意,$拉可以包含元素匹配标准。因此,此单个更新将删除不包含字段“productImage”的项目:
db.lists.update({}, {$pull:{listItems:{productImage:{$exists:false}}}}, false, true)
这个工作。只需编辑命令即可更新所有文档。 db.lists.update({},{$ pull:{listItems:{productImage:{$ exists:false}}}},false,true) – techpaisa 2012-02-16 05:44:43
看来,你不能一步到位将其删除。但这里有两个步骤的组合:
// unset matching array element. That'll leave null on its place
db.lists.update({"listItems.productImage":{$exists: false}},
{$unset:{"listItems.$":1}});
// remove nulls from array
db.lists.update({listItems: null},
{$pull: {listItems: null}});
刚试过这个,但它没有奏效。也许是因为它实际上是一个内部数组? – James 2012-02-15 00:04:30
您应该能够使用$pull operator,这将删除与您指定的匹配准则的一切。
db.lists.update({}, {"$pull": {"listItems" : {"productImage" : {$exists: false}} }})
您能否更新您的原始文档结构?因为在你的文档它是listitems.productimage和在你的查询它是item.productimage ..哪一个是正确的.. – RameshVel 2012-02-15 06:14:01