Jika kueri cocok dengan larik menggunakan operator negasi, seperti , , atau , maka Anda tidak dapat menggunakan operator posisi untuk memperbarui nilai dari larik ini
Namun, jika bagian kueri yang dinegasikan berada di dalam ekspresi, Anda dapat menggunakan operator posisi untuk memperbarui bidang ini
Contoh
Perbarui Nilai dalam Array
Pertimbangkan koleksi siswa dengan dokumen berikut.
{ "_id" : 1, "grades" : [ 80, 85, 90 ] } { "_id" : 2, "grades" : [ 88, 90, 92 ] } { "_id" : 3, "grades" : [ 85, 100, 90 ] }
Untuk memperbarui 80 menjadi 82 di grades array in the first document, use the positional $ operator if you do not know the position of the element in the array:
db.students.update( { _id: 1, grades: 80 }, { $set: { "grades.$" : 82 } } ) _
Ingat bahwa operator posisi $ bertindak sebagai placeholder untuk kecocokan pertama pembaruan.
Perbarui Dokumen dalam Array
Operator posisional $ memfasilitasi pembaruan ke larik yang berisi dokumen tersemat. Gunakan operator $ posisional untuk mengakses bidang dalam dokumen tersemat dengan di $ operator.
db.collection.update( { <query selector> }, { <update operator>: { "array.$.field" : value } } )
Perhatikan dokumen berikut dalam koleksi siswa yang nilainya element value is an array of embedded documents:
{ _id: 4, grades: [ { grade: 80, mean: 75, std: 8 }, { grade: 85, mean: 90, std: 5 }, { grade: 90, mean: 85, std: 3 } ] }
Gunakan operator posisional $ untuk memperbarui nilai std field in the embedded document with the grade of 85:
db.students.update( { _id: 4, "grades.grade": 85 }, { $set: { "grades.$.std" : 6 } } ) _
Perbarui Dokumen Tersemat Menggunakan Beberapa Pencocokan Bidang
Operator $ dapat memperbarui elemen larik pertama yang cocok dengan beberapa kriteria kueri yang ditentukan oleh operator.
Perhatikan dokumen berikut dalam koleksi siswa yang nilainya field value is an array of embedded documents:
{ _id: 4, grades: [ { grade: 80, mean: 75, std: 8 }, { grade: 85, mean: 90, std: 5 }, { grade: 90, mean: 85, std: 3 } ] }
Pada contoh di bawah, operator $ memperbarui nilai std field in the first embedded document that has grade field with a value less than or equal to 90 and a mean field with a value greater than 80:
db.students.update( { _id: 4, grades: { $elemMatch: { grade: { $lte: 90 }, mean: { $gt: 80 } } } }, { $set: { "grades.$.std" : 6 } } ) _
Operasi ini memperbarui dokumen tersemat pertama yang cocok dengan kriteria, yaitu dokumen tersemat kedua dalam larik
{ _id: 4, grades: [ { grade: 80, mean: 75, std: 8 }, { grade: 85, mean: 90, std: 6 }, { grade: 90, mean: 85, std: 3 } ] }
参见
, ,
← Operator Pembaruan Array $addToSet →
© MongoDB, Inc 2008-2017. MongoDB, Mongo, dan logo daun adalah merek dagang terdaftar dari MongoDB, Inc