一尘不染

猫鼬,更新对象数组中的值

node.js

有没有一种方法可以更新对象中的值?

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

假设我要为id = 2的项更新名称和值项;

我尝试了以下w /猫鼬:

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

这种方法的问题在于它会更新/设置整个对象,因此在这种情况下,我会丢失id字段。

猫鼬中是否有更好的方法来设置数组中的某些值,但不理会其他值?

我也只查询了这个人:

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

阅读 251

收藏
2020-07-07

共1个答案

一尘不染

你近了
您应该在使用$update运算符时使用点符号来做到这一点:

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