3

ここに私のコレクション(労働者)があります:

"type" : "Manager",
"employees" : [{
    "name" : "bob"
    "id" : 101
    },{
    "name" : "phil"
    "id" : 102
    },{
    "name" : "bob"
    "id" : 103
    }]

まず、これは配列ではないため、$pullAll やその他の配列コマンドは機能しません。私がやりたいことは次のとおりです。(1)タイプ ManagerのすべてのサブドキュメントでID 101 のコレクションを検索します。(2) 101 が"Manager"サブドキュメントに存在する場合、アイテム 103 を削除したい.

私はこの問題について 2 日間インターウェブを飛び交いましたが、理解できません。

私はこれを試しました(および他の多くのバリエーション):

db.workers.update( {"type":"Manager","employees.id":101},{$pull : {"employees.id" : {"id" : 103}}},false,true)
4

1 に答える 1

4

$pullオブジェクトの構文がオフです。代わりにこれを試してください:

db.workers.update({"type":"Manager","employees.id":101},
    {$pull : {"employees" : {"id" : 103}}},false,true)

それらが削除されたことを確認するには:

db.workers.find({
    type: "Manager", 
    $and: [{'employees.id': 101}, {'employees.id': 103}]
})
于 2013-04-05T15:27:32.893 に答える