sql >> Database >  >> NoSQL >> MongoDB

Hoe een matrixwaarde in Mongoose bij te werken

Je kunt niet beide gebruiken $set en $push in dezelfde update-expressie als geneste operators.

De juiste syntaxis voor het gebruik van de update-operators volgt:

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

waar <operator1>, <operator2> kan afkomstig zijn uit een van de hier gespecificeerde lijst met update-operators.

Voor het toevoegen van een nieuw element aan de array, een enkele $push operator zal volstaan, b.v. u kunt de findByIdAndUpdate . gebruiken update methode om het gewijzigde document terug te geven als

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

Je originele update() . gebruiken methode, de syntaxis is

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

waarin de callback-functie de argumenten (err, raw) . ontvangt waar

  • err is de fout als er een is opgetreden
  • raw is het volledige antwoord van Mongo

Aangezien u het gewijzigde document wilt controleren, raad ik u aan de findByIdAndUpdate te gebruiken functie sinds de update() methode geeft u niet het gewijzigde document, alleen het volledige schrijfresultaat van mongo.

Als u een veld in het document wilt bijwerken en tegelijkertijd een element aan een array wilt toevoegen, kunt u dat doen

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

Het bovenstaande zal de name updaten veld naar "foo" en voeg de werknemer-ID toe aan de childrens array.



  1. Afhankelijkheden proberen op te lossen:.NET Standard Library wijzigen in NET Core - Microsoft.Extensions.Primitives

  2. Hoe worden de gegevens in een MongoDB-database op schijf opgeslagen?

  3. MapReduce-resultaten lijken beperkt tot 100?

  4. Hoe doe ik meer dan/minder dan met MongoDB?