有没有一种方法可以更新对象中的值?
{ _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(). });
你近了 您应该在使用$update运算符时使用点符号来做到这一点:
$
Person.update({'items.id': 2}, {'$set': { 'items.$.name': 'updated item2', 'items.$.value': 'two updated' }}, function(err) { ...