非常に単純なケースがあります。毎晩深夜にコレクションを更新したい。私は_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;
}
}
_
マングースでそれを行う方法?ありがとう!
まず、更新するドキュメントを見つけるためのクエリが必要です。これは単に:
{"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/
MongodbのupdateMany()
メソッドを使用して、複数のドキュメントを更新できます
単純なクエリはこのようなものです
db.collection.updateMany(filter, update, options)
UppdateManyの詳細なドキュメントについては、 ここ を参照してください
あなたの要件に従って、更新コードは次のようになります:
User.updateMany({"created": false}, {"$set":{"created": true}});
ここでは $ set を使用する必要があります。作成されたものをtrueからfalseに変更したいだけだからです。参考のためにドキュメント全体を変更する場合は、$ setを使用する必要はありません