0

次のアイテムを含むコレクションがあります。

{ "Queries" : [  {  "Results" : [  {  "id" : 1 },  {  "id" : 2 } ] } ], "_id" : ObjectId("51ddb6f9b18996be485cba6f") }
{ "Queries" : [  {  "Results" : [  {  "id" : 0 },  {  "id" : 3 } ] } ], "_id" : ObjectId("51ddb701b18996be485cba70") }
{ "Queries" : [  {  "Results" : [  {  "id" : 1 },  {  "id" : 2 } ] } ], "_id" : ObjectId("51ddb705b18996be485cba71") }
{ "Queries" : [  {  "Results" : [  {  "id" : 1 },  {  "id" : 2 },  {  "id" : 4 } ] } ], "_id" : ObjectId("51ddb70db18996be485cba72") }
{ "Queries" : [  {  "Results" : [  {  "id" : 1 },  {  "id" : 2 },  {  "id" : null } ] } ], "_id" : ObjectId("51ddb7e4b18996be485cba73") }

ドキュメントの「クエリ」フィールドには、サブドキュメントの配列が含まれています。これらのサブドキュメントには、別のサブドキュメントの配列が含まれています。

ドキュメントの「id」フィールドが 1 である「結果」フィールドのすべてのエントリを削除したいと考えています。

私は成功せずに次のことを試しました:

update({}, {$pull :{"Queries.Results": {"id":1}}}, {"multi":true})
update({}, {$pull :{"Queries.Results.id":1}}, {"multi":true})

MongoDB でこれを達成するにはどうすればよいですか?

編集:更新後の find() の予想される結果は次のとおりです

{ "Queries" : [  {  "Results" : [  {  "id" : 2 } ] } ], "_id" : ObjectId("51ddb6f9b18996be485cba6f") }
{ "Queries" : [  {  "Results" : [  {  "id" : 0 },  {  "id" : 3 } ] } ], "_id" : ObjectId("51ddb701b18996be485cba70") }
{ "Queries" : [  {  "Results" : [  {  "id" : 2 } ] } ], "_id" : ObjectId("51ddb705b18996be485cba71") }
{ "Queries" : [  {  "Results" : [  {  "id" : 2 },  {  "id" : 4 } ] } ], "_id" : ObjectId("51ddb70db18996be485cba72") }
{ "Queries" : [  {  "Results" : [  {  "id" : 2 },  {  "id" : null } ] } ], "_id" : ObjectId("51ddb7e4b18996be485cba73") }
4

1 に答える 1

3

これは、使用する必要があるクエリです。

db.collection.update( { "Queries.Results.id":1 }, { $pull: { "Queries.$.Results": {"id":1} } } )

更新するドキュメントを見つけるには、「where」句を指定する必要があります。位置演算子 $ も欠落しています。クエリは複数の結果を持つことができるため、使用する必要があります。

于 2013-07-10T22:25:34.627 に答える