【问题标题】:update multiple records using mongoosejs in node在节点中使用 mongoosejs 更新多条记录
【发布时间】:2013-02-03 15:40:50
【问题描述】:

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

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    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}

    听起来您需要重做一些事情,一次将一个文档从队列中删除,然后切换到 findOneAndUpdate 而不是 update,这样您就可以访问从 'queued' 更新为 'active' 的文档.

    【讨论】:

    • 限制的重点是做到这一点,所以我只更新 10 条记录。您的查询看起来会使用{status:'queued'} 更新所有内容。我还需要我在示例中使用的第一个回调来查看我正在更改的记录(而不仅仅是受影响的数字)。
    • @Sammaye:谢谢,我很担心。此类事情的当前最佳做法是什么?
    • @devnill 编辑似乎很好地回答了这个问题,不幸的是这不是一件容易的事,也没有简单的正确方法
    猜你喜欢
    • 1970-01-01
    • 2022-01-23
    • 2016-10-16
    • 1970-01-01
    • 1970-01-01
    • 2019-02-18
    • 2012-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多