9

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

1 に答える 1

17

Query#updateoptionsパラメータを受け入れませんが、受け入れますModel.update。したがって、これを次のように書き直したいと思います。

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

チェーン内の呼び出しで何をしようとしていたかはわかりませんがlimit、更新では使用できません。

アップデート

上記のクエリは、すべてのドキュメントを更新します{status: 'queued'}。での唯一の選択肢updateは、最初に一致する1つ{multi: false}またはすべての一致{multi: true}です。

ドキュメントを一度に1つずつキューから取り出して、に切り替える必要がfindOneAndUpdateあるようです。これにより、に更新したupdateドキュメントにアクセスできるようになります。'queued''active'

于 2013-02-03T16:36:59.857 に答える