Anda tidak dapat menggunakan keduanya $set dan $push dalam ekspresi pembaruan yang sama dengan operator bersarang.
Sintaks yang benar untuk menggunakan operator pembaruan berikut:
{
<operator1>: { <field1>: <value1>, ... },
<operator2>: { <field2>: <value2>, ... },
...
}
di mana <operator1>, <operator2> dapat dari salah satu daftar operator pembaruan yang ditentukan di sini.
Untuk menambahkan elemen baru ke larik, satu $push operator akan cukup misalnya Anda dapat menggunakan findByIdAndUpdate memperbarui metode untuk mengembalikan dokumen yang dimodifikasi sebagai
Employeehierarchy.findByIdAndUpdate(employeeparent._id,
{ "$push": { "childrens": employee._id } },
{ "new": true, "upsert": true },
function (err, managerparent) {
if (err) throw err;
console.log(managerparent);
}
);
Menggunakan update() asli Anda metode, sintaksnya adalah
Employeehierarchy.update(
{ "_id": employeeparent._id},
{ "$push": { "childrens": employee._id } },
function (err, raw) {
if (err) return handleError(err);
console.log('The raw response from Mongo was ', raw);
}
);
di mana fungsi panggilan balik menerima argumen (err, raw) dimana
erradalah kesalahan jika terjadirawadalah tanggapan penuh dari Mongo
Karena Anda ingin memeriksa dokumen yang dimodifikasi, saya sarankan Anda menggunakan findByIdAndUpdate berfungsi sejak update() metode tidak akan memberi Anda dokumen yang dimodifikasi, hanya hasil penulisan lengkap dari mongo.
Jika Anda ingin memperbarui bidang dalam dokumen dan menambahkan elemen ke larik secara bersamaan, Anda dapat melakukannya
Employeehierarchy.findByIdAndUpdate(employeeparent._id,
{
"$set": { "name": "foo" },
"$push": { "childrens": employee._id }
}
{ "new": true, "upsert": true },
function (err, managerparent) {
if (err) throw err;
console.log(managerparent);
}
);
Di atas akan memperbarui name ke "foo" dan tambahkan id karyawan ke childrens larik.