我在使用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.
});
答案 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'
。