Mongoose,更新对象数组中的值
有没有办法更新对象的值?
{ _id: 1, name: 'John Smith', items: [{ id: 1, name: 'item 1', value: 'one' },{ id: 2, name: 'item 2', value: 'two' }] }
比方说,我想更新项目的名称和价值项目,其中id = 2;
我已经尝试过以下瓦特/mongoose:
var update = {name: 'updated item2', value: 'two updated'}; Person.update({'items.id': 2}, {'$set': {'items.$': update}}, function(err) { ...
这种方法的问题是它更新/设置整个对象,因此在这种情况下我失去了id字段。
有没有更好的方法mongoose在数组中设置某些值,但留下其他值单独?
我也曾问过这个人:
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(). });
你很近 你应该在你的$set
使用点符号来做到这一点:
Person.update({'items.id': 2}, {'$set': { 'items.$.name': 'updated item2', 'items.$.value': 'two updated' }}, function(err) { ...
对于每个文档,更新操作符$set
可以设置多个值 ,所以不必replaceitems
数组中的整个对象,也可以分别设置对象的name
和value
字段。
{'$set': {'items.$.name': update.name , 'items.$.value': update.value}}
在mongoose,按照下面的程序
.update({"_id": args._id, "viewData._id": widgetId}, {$set: {"viewData.$.widgetData": widgetDoc.widgetData}})
model.update({"_id": 1, "items.id": "2"}, {$set: {"items.$.name": "yourValue","items.$.value": "yourvalue"}})
Mongodb文件
在mongoose,我们可以更新,就像简单的数组
user.updateInfoByIndex(0,"test") User.methods.updateInfoByIndex = function(index, info) ={ this.arrayField[index]=info this.save() }