Vous ne pouvez pas utiliser à la fois $set
et $push
dans la même expression de mise à jour que les opérateurs imbriqués.
La syntaxe correcte pour l'utilisation des opérateurs de mise à jour est la suivante :
{
<operator1>: { <field1>: <value1>, ... },
<operator2>: { <field2>: <value2>, ... },
...
}
où <operator1>, <operator2>
peut provenir de n'importe quelle liste d'opérateurs de mise à jour spécifiée ici.
Pour ajouter un nouvel élément au tableau, un seul $push
l'opérateur suffira, par ex. vous pouvez utiliser le findByIdAndUpdate
méthode de mise à jour pour renvoyer le document modifié sous
Employeehierarchy.findByIdAndUpdate(employeeparent._id,
{ "$push": { "childrens": employee._id } },
{ "new": true, "upsert": true },
function (err, managerparent) {
if (err) throw err;
console.log(managerparent);
}
);
Utilisation de votre update()
d'origine méthode, la syntaxe est
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);
}
);
dans laquelle la fonction callback reçoit les arguments (err, raw)
où
err
est l'erreur, le cas échéantraw
est la réponse complète de Mongo
Puisque vous voulez vérifier le document modifié, je vous suggère d'utiliser le findByIdAndUpdate
fonction depuis la update()
La méthode ne vous donnera pas le document modifié, juste le résultat d'écriture complet de mongo.
Si vous souhaitez mettre à jour un champ dans le document et ajouter un élément à un tableau en même temps, vous pouvez le faire
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);
}
);
Ce qui précède mettra à jour le name
champ à "foo" et ajoutez l'identifiant de l'employé au childrens
tableau.