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
err
adalah kesalahan jika terjadiraw
adalah 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.