MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Cara memperbarui nilai array di Mongoose

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 terjadi
  • raw 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.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Apakah mongocli mendukung URL formula untuk chip Apple M1?

  2. Bagaimana cara memeriksa koneksi ke mongodb

  3. Bagaimana cara menggunakan penyisipan massal yang tidak berurutan dengan Mongoskin?

  4. Golang mgo mendapatkan benda kosong

  5. Bagaimana cara saya meminta nilai yang berbeda di Mongoose?