埋め込まれたドキュメントの配列のフィールドを更新したいのですが。
私のサンプルドキュメントは:
db.students.insert(
{
first_name:'AA',
last_name:'BB',
cours_reussis:[{intitule:'PAI',note:0,name_school:'EPFC'}]
}
)
name_school
の値を「EPFC」ではなく「ENSA」に変更したい。
これを試して。他の変数に基づいて小さな変更が必要になる場合がありますが、これはうまくいくと思います:
db.students.update(
{ first_name: 'AA' },
{ $set:
{
"cours_reussis.0.name_school": 'ENSA'
}
}
)
cours_reussis
は配列です。 0は配列のインデックスです。
参考までに: $ set
配列内の埋め込みドキュメントの位置がわかっている場合、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',
}
}
)
これを使用して、インデックスを知らなくても最初に一致する配列要素を更新できます。
db.students.update(
{ first_name: 'AA',name_school:'EPFC' },
{ $set:
{
"cours_reussis.$.name_school": 'ENSA'
}
}
)