0

私は文書を持っています:

{
    "_id" : ObjectId("5152ba0708c164359d5ca616"),
        "info": "Some interesting information.",
    "elements" : [
        {
            "status" : "accepted",
            "id" : "10"
        },
                {
            "status" : "waiting",
            "id" : "20"
        },
                {
            "status" : "accepted",
            "id" : "30"
        }
    ]
}

「ステータス」が「待機中」で「ID」が 20 の場合、「ステータス」を「承認済み」に変更するにはどうすればよいですか?

4

2 に答える 2

3

位置 (「$」) 演算子を使用します。

// single
db.collection.update({ _id: ..., "elements.id": "20" }, { $set: { "elements.$.status": "status" } })

// all
db.collection.update({ "elements.id": "20" }, { $set: { "elements.$.status": "status" } }, { multi: true  })
于 2013-03-28T09:39:03.550 に答える
1

elemMatch ( http://docs.mongodb.org/manual/reference/projection/elemMatch/ ) を使用する必要があります。status や id 20 などの配列の両方の項目を一致させるには、 $set コマンドを使用できます。elemMatch を使用する理由は、結果を返す前に両方の条件が同じサブドキュメントで一致することを確認するためです。

db.CollectionName.update({"_id" : ObjectId("5152ba0708c164359d5ca616") , "elements" : { "$elemMatch : {"status" : "waiting" , "Id" : "20"}}},{ $set : {"elements.$.status" : "accepted"}});
于 2013-03-28T09:00:25.733 に答える