10

以下はドキュメントの例です。

    {
        "_id" : ...,
        "inprogress" : true,
        "name" : "Biz report",
 "inviteCode" : [
         {
                 "key" : "4fbd2b4b265a3",
                 "status" : "1"
         },
         {
                 "key" : "4fbd2b4b265b5",
                 "status" : "1"
         },
         {
                 "key" : "4fbd2b4b265b9",
                 "status" : "1"
         },
         {
                 "key" : "4fbd2b4b265bc",
                 "status" : "1"
         },
         {
                 "key" : "4fbd2b4b265c0",
                 "status" : "1"
         }
 ]
    }

ドキュメントによると、修飾子オブジェクトを更新引数として使用できますが、更新引数には、更新したい魔女フィールドのフィルターが含まれていないようです。使用することしか$set:{name:"xxx"}できませんが、ネストされた配列で更新する要素を指定できません。キーが「4fbd2b4b265a3」のinviteCode列の「ステータス」フィールドを設定するにはどうすればよいですか?

4

1 に答える 1

13

$ 位置演算子を使用できます: http://www.mongodb.org/display/DOCS/Updating#Updating-The%24positionaloperator

あなたの場合:

db.collection.update( { inviteCode: { $elemMatch: { key: "4fbd2b4b265a3" } } },
    { $set: { 'inviteCode.$.status': '2' } } )

「$」は事実上、値が配列内の最初の一致のインデックスに設定される変数です。

于 2012-05-23T19:14:59.550 に答える