对于Node.js使用moongoose,我正在尝试浏览“STEPS”数组中的每个对象并将stepid减少1.使用下面的模式:
"appid": 1,
"steps": [
{
"name": "step4",
"stepid": 4,
},
{
"name": "step5",
"stepid": 5,
}
],
"appname": "myapp"
以下是我尝试使用.update:
的方法app.db.models.myApps.update(
{'appid': 1, 'steps.stepid': { $gt: 3 }},
{ $inc: { 'steps.$.stepid': -1 } },
{ multi: true }
);
但我似乎无法让它正常工作。我能够使用代码并让它更新,但它只会更新数组中的1个对象,而我希望它遍历数组中的每个对象并减少1。
我应该将其分解并首先使用find然后更新吗?我中的旧开发者说要做一个for循环,但我知道这不是用节点做的正确方法。
非常感谢任何帮助或建议!谢谢!
答案 0 :(得分:0)
不幸的是,这似乎是mongodb的一个问题,它不支持它。
Per:How to Update Multiple Array Elements in mongodb
在这里:https://jira.mongodb.org/browse/SERVER-1243
目前解决方法是:
function convertDirectMessages(id, cb) {
Conversation.collection.update(
{'messages.context': 'direct'},
{$set:{'messages.$.context': {type:'direct'}}},
{safe:true, multi:true},
function(err, updated) {
if (err) return cb(err);
if (updated) return convertDirectMessages(id, cb);
cb();
}
);
}
convertDirectMessages(posted._id, this);