1. ホーム
  2. node.js

[解決済み】Mongooseで配列の値を更新する方法

2022-02-20 05:27:59

質問

私は配列の値を更新したいのですが、それを行うための適切な方法についてよく分からないので、私は以下の方法を試してみましたが、私のために動作しませんでした。

私のモデルです。 モデル内のchildrenフィールド

   childrens: {
       type: Array,
       default: ''
  }

私のクエリ

   Employeehierarchy.update({ _id: employeeparent._id} ,{ $set: {"$push": { "childrens": employee._id }} })
   .exec(function (err, managerparent) {});

誰か私にhelp.Thanksを提供することができます。

どのように解決するのですか?

を同時に使用することはできません。 $set $push をネストした演算子と同じ更新式で使用することができます。

を使用するための正しい構文です。 update 演算子 は次のようになります。

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

ここで <operator1>, <operator2> は、指定された更新オペレータのリストのいずれかから選択することができます。 ここで .

配列に新しい要素を追加するには、1つの $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) ここで

  • 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" に変更し、従業員 ID を childrens の配列になります。