web-dev-qa-db-ja.com

マングースの多くを更新する

非常に単純なケースがあります。毎晩深夜にコレクションを更新したい。私は_node-schedule_を使用しています:

_schedule.scheduleJob('0 0 * * *', () => {
   Users.updateMany();
});
_

私がやりたいのは、コレクション(Users)内のすべてのドキュメントをループ処理し、_User.created_がfalseの場合、それをtrueに変換することです。

JavaScriptでは次のようになります。

_for (let user in Users) {
   if (user.created === false) {
      user.created = true;
   }
} 
_

マングースでそれを行う方法?ありがとう!

編集:ストーリーは非常にシンプルです。mongooseを使用してdbのすべての要素を反復処理し、反復処理された要素にフィールド「created」=== falseがある場合は、trueに変更します。

18
Patrickkx

まず、更新するドキュメントを見つけるためのクエリが必要です。これは単に:

{"created": false}

次に、これらのドキュメントを更新する方法をmongoに伝える更新クエリが必要です。

{"$set":{"created": true}}

変更するフィールドを指定するには、$set演算子を使用する必要があります。そうしないと、ドキュメント全体が上書きされます。最後に、これらのコンポーネントを単一のmongo呼び出しに組み合わせて、追加のパラメーターを指定して、複数のドキュメントを変更することをmongoに指示できます。

User.update({"created": false}, {"$set":{"created": true}}, {"multi": true}, (err, writeResult) => {});

Mongooseはmongo APIを厳密に複製しようとするため、この情報はすべてMongoDBのドキュメント内でのみ見つけることができます。 https://docs.mongodb.com/manual/reference/method/db.collection.update/

19
jakedipity

MongodbのupdateMany()メソッドを使用して、複数のドキュメントを更新できます

単純なクエリはこのようなものです

db.collection.updateMany(filter, update, options)

UppdateManyの詳細なドキュメントについては、 ここ を参照してください

あなたの要件に従って、更新コードは次のようになります:

User.updateMany({"created": false}, {"$set":{"created": true}});

ここでは $ set を使用する必要があります。作成されたものをtrueからfalseに変更したいだけだからです。参考のためにドキュメント全体を変更する場合は、$ setを使用する必要はありません

34
Harsh Patel