0

使用moongoose for Node.js,我试图遍历“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。

我应该打破它并首先使用查找然后更新吗?我的老开发人员说要执行一个 for 循环,但我知道这不是使用 node 执行此操作的正确方法。

非常感谢任何帮助或建议!谢谢!

4

1 回答 1

0

不幸的是,这似乎是不支持它的 mongodb 的问题。

Per:如何在 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);
于 2013-09-10T02:25:14.470 回答