web-dev-qa-db-ja.com

埋め込みドキュメントの配列の単一のフィールドを更新するにはどうすればよいですか?

埋め込まれたドキュメントの配列のフィールドを更新したいのですが。

私のサンプルドキュメントは:

db.students.insert(
    {
        first_name:'AA',
        last_name:'BB',
        cours_reussis:[{intitule:'PAI',note:0,name_school:'EPFC'}]
    }
)

name_schoolの値を「EPFC」ではなく「ENSA」に変更したい。

7
zouhair

これを試して。他の変数に基づいて小さな変更が必要になる場合がありますが、これはうまくいくと思います:

db.students.update(
   { first_name: 'AA' },
   { $set:
      {
        "cours_reussis.0.name_school": 'ENSA'
      }
   }
)

cours_reussisは配列です。 0は配列のインデックスです。

参考までに: $ set

4

配列内の埋め込みドキュメントの位置がわかっている場合、Kalharaからの回答は正しいですが、位置を知らなくても最初に一致する配列要素を更新するために使用できる別の方法があります。

クエリ条件で単一の配列を使用して更新すると仮定すると、 位置演算子($ は、一致する配列要素を参照するために使用できます。

db.students.update(
    // Match criteria
    {
        first_name: 'AA',
        last_name: 'BB',
        'cours_reussis.name_school': 'EPFC'
    },

    // Update first matching array element using the positional operator ($)
    {
        $set: {
            'cours_reussis.$.name_school': 'ENSA',
        }
    }
)
14
Stennie

これを使用して、インデックスを知らなくても最初に一致する配列要素を更新できます。

db.students.update(
    { first_name: 'AA',name_school:'EPFC' },
    { $set:
       {
         "cours_reussis.$.name_school": 'ENSA'
       }
    }
 )
0
kumaran