9

我在使用 mongoosejs 和节点更新多条记录时遇到问题。出于某种原因,我只更新一条记录,即使多个匹配。我还注意到回调不会在 .update() 之后触发。我没有收到任何错误消息。这里发生了什么?

Page.find({status:'queued'})
    .limit(queue_limit-queue.length)
    .update({ status: 'active' },{ multi: true },function(err,num){
        console.log("updated "+num);
        //this callback will never fire, but a single record will be updated and marked as active.                                                                                                 
    });
4

1 回答 1

17

Query#update不接受options参数,但接受Model.update。所以你想把它重写为:

Page.update({status:'queued'}, {status: 'active'}, {multi: true}, 
    function(err, num) {
        console.log("updated "+num);
    }
);

我不确定你试图对limit链中的调用做什么,但你不能在更新中使用它。

更新

上面的查询将更新所有文档 where {status: 'queued'}。您唯一的选择update只是第一个匹配的一个{multi: false}或所有匹配项{multi: true}

听起来您需要重新做一些事情以一次将文档从队列中取出并切换到,findOneAndUpdate而不是update这样您就可以访问已从 更新到 的'queued'文档'active'

于 2013-02-03T16:36:59.857 回答