2013-02-03 50 views
7

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

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.                         
    }); 

回答

14

Query#update不接受options参数,但Model.update一样。所以,你会想改写这个为:

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

我不知道你试图在链条的limit调用来完成,但你不能使用在更新。

UPDATE

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

听起来像是你需要返工件事情要文档了你的队列一次一个,并切换到findOneAndUpdate而不是update所以你可以访问你从'queued''active'更新文档。

+0

限制的重点在于使其只更新10条记录。你的查询看起来像是用'{status:'queued'}'更新所有内容。我还需要我在示例中使用的第一个回调来查看我正在更改哪些记录(而不仅仅是受影响的数量)。 – devnill

+0

@devnill mongodb尚不支持有限更新 – Sammaye

+0

@devnill这是正确的。查看更新以获取替代方案。 – JohnnyHK

相关问题