MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как да актуализирате стойност на масив в Mongoose

Не можете да използвате и двете $set и $push в същия израз за актуализиране като вложените оператори.

Следва правилният синтаксис за използване на операторите за актуализиране:

{
   <operator1>: { <field1>: <value1>, ... },
   <operator2>: { <field2>: <value2>, ... },
   ...
}

където <оператор1>, <оператор2> може да бъде от всеки от списъка с оператори за актуализиране, посочени тук.

За добавяне на нов елемент към масива, еднократно $push оператор ще бъде достатъчен, напр. можете да използвате findByIdAndUpdate метод за актуализиране, за да върнете модифицирания документ като

Employeehierarchy.findByIdAndUpdate(employeeparent._id,
    { "$push": { "childrens": employee._id } },
    { "new": true, "upsert": true },
    function (err, managerparent) {
        if (err) throw err;
        console.log(managerparent);
    }
);

Използване на оригиналния ви update() метод, синтаксисът е

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);
   }
);

в който функцията за обратно извикване получава аргументите (err, raw) където

  • грешка е грешката, ако е възникнала такава
  • необработено е пълният отговор от Mongo

Тъй като искате да проверите модифицирания документ, бих ви предложил да използвате findByIdAndUpdate функция от update() методът няма да ви даде модифицирания документ, а само пълния резултат от запис от mongo.

Ако искате да актуализирате поле в документа и да добавите елемент към масив едновременно, тогава можете да направите

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);
    }
);

Горното ще актуализира name полето към "foo" и добавете идентификатора на служителя към childrens масив.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongodb обобщава (брои) в множество полета едновременно

  2. Как да инсталирате MongoDB 4.2 на системи RedHat/ CentOS 7

  3. Разбиране на опциите за изчакване на клиента на MongoDB

  4. Актуализирайте модела с Mongoose, Express, NodeJS

  5. Най-добрият междинен софтуер за съхранение на сесии за Express + MongoDB