如何删除MongoDB中的嵌入式文档?

时间:2012-02-14 23:26:35

标签: mongodb

我有一个看起来像这样的文件:

{listName: 'LoremIpsum'
 listItems: [{productDescription: "", productImage: ""}...]}

如果productImage不存在,如何从listItems中删除项?

我尝试了以下但没有结果:

db.lists.update({"item.productImage":{$exists: false}}, {$unset:{"item":1}}, false, true )

3 个答案:

答案 0 :(得分:3)

请注意,$ pull可以包含元素匹配条件。因此,此单个更新将删除不包含字段的项目" productImage" :

db.lists.update({}, {$pull:{listItems:{productImage:{$exists:false}}}}, false, true)

答案 1 :(得分:0)

似乎您无法一步删除它。但这是一个两步组合:

// 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}});

答案 2 :(得分:0)

您应该能够使用$pull operator,这将使用您指定的匹配条件删除所有内容。

db.lists.update({}, {"$pull": {"listItems" : {"productImage" : {$exists: false}} }})