$set
の両方を使用することはできません および$push
ネストされた演算子と同じ更新式で。
更新演算子を使用するための正しい構文は次のとおりです。
{
<operator1>: { <field1>: <value1>, ... },
<operator2>: { <field2>: <value2>, ... },
...
}
ここで、<operator1>, <operator2>
ここで指定された更新演算子リストのいずれかから取得できます。
配列に新しい要素を追加するには、単一の $push
オペレーターで十分です。 findByIdAndUpdate
を使用できます 変更されたドキュメントを次のように返すupdateメソッド
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)
を受け取る ここで
-
err
発生した場合のエラーです raw
モンゴからの完全な回答です
変更されたドキュメントを確認したいので、 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」に設定し、従業員IDをchildrens
に追加します 配列。