我有一个看起来像这样的文件:
{listName: 'LoremIpsum'
listItems: [{productDescription: "", productImage: ""}...]}
如果productImage不存在,如何从listItems中删除项?
我尝试了以下但没有结果:
db.lists.update({"item.productImage":{$exists: false}}, {$unset:{"item":1}}, false, true )
答案 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}} }})