2012-02-14 21 views
1

私はこのようになります文書を持っている:MongoDBで埋め込みドキュメントをどのように削除しますか?

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

私はproductImageが存在しなかった場合のlistItemsから項目を削除することについてどのように行きますか?

私は結果なしで次のことを試してみた:

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

元の文書構造を更新してください。あなたの文書でそれはlistitems.productimageであり、あなたのクエリでitem.productimage ..だったからです。どちらが正しいですか。 – RameshVel

答えて

3

$プル要素一致基準を含めることができます。このように、この単一の更新では、「productImage」フィールドを含まない項目が削除されます。

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

これは機能します。コマンドを編集してすべてのドキュメントを更新してください。 db.lists.update({}、{$ pull:{listItems:{productImage:{$ exists:false}}}}、false、true) – techpaisa

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}}); 
+0

これを試しましたが、うまくいきませんでした。おそらくそれは実際には内部配列なのでしょうか? – James

0

あなたが指定した一致基準ですべてを削除します$pull operator、使用することができるはずです。しかし、ここでは2段階の組み合わせです。

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

関連する問題