1. ホーム
  2. node.js

[解決済み] Mongoose、オブジェクトの配列の値を更新する

2022-06-29 13:31:20

質問

オブジェクトの値を更新する方法はありますか?

{
  _id: 1,
  name: 'John Smith',
  items: [{
     id: 1,
     name: 'item 1',
     value: 'one'
  },{
     id: 2,
     name: 'item 2',
     value: 'two'
  }]
}

id = 2のitemのnameとvalueの項目を更新したいとします。

mongooseで以下を試してみました。

var update = {name: 'updated item2', value: 'two updated'};
Person.update({'items.id': 2}, {'$set':  {'items.$': update}}, function(err) { ...

この方法の問題は、オブジェクト全体を更新/設定することで、この場合、私はidフィールドを失うことになります。

mongooseで、配列の特定の値を設定し、他の値はそのままにする良い方法はありますか?

Personだけの問い合わせもしたことがあります。

Person.find({...}, function(err, person) {
  person.items ..... // I might be able to search through all the items here and find item with id 2 then update the values I want and call person.save().
});

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

近いですね。ドット記法で $ 更新演算子 を使って行います。

Person.update({'items.id': 2}, {'$set': {
    'items.$.name': 'updated item2',
    'items.$.value': 'two updated'
}}, function(err) { ...