使用节点中的mongoosejs更新多个记录

时间:2013-02-03 15:40:50

标签: node.js mongodb mongoose

我在使用mongoosejs和node更新多条记录时遇到问题。出于某种原因,我只更新单个记录,即使多个匹配。我也注意到回调不会在.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.                                                                                                 
    });

1 个答案:

答案 0 :(得分:14)

Query#update不接受options参数,但Model.update不接受Page.update({status:'queued'}, {status: 'active'}, {multi: true}, function(err, num) { console.log("updated "+num); } ); 参数。所以你想把它重写为:

limit

我不确定您在链中的{status: 'queued'}调用尝试了什么,但是您无法在更新中使用它。

<强>更新

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

听起来您需要重做工作,一次一个地从队列中取出文档,然后切换到findOneAndUpdate而不是'queued',这样您就可以访问自{{1}更新的文档转到'active'