Mongo 4.2
以降 、db.collection.update()
集約パイプラインを受け入れることができ、最終的にそれ自体の値に基づいてフィールドを更新できるようになります。したがって、非効率的な検索/foreachパターンを回避できます。
また、あなたは$inc
を見ていました 演算子を使用して1日を追加しますが、集計パイプラインを更新として使用できるようになったため、$add
演算子を使用できます:
// { "date" : ISODate("2020-04-05T07:14:17.802Z"), "x" : "y" }
db.collection.updateMany(
{ date : { $exists : true } },
[{ $set: { date: { $add: ["$date", 24*60*60000] } } }]
)
// { "date" : ISODate("2020-04-06T07:14:17.802Z"), "x" : "y" }
-
最初の部分
{ date : { $exists : true } }
一致クエリであり、更新するドキュメントをフィルタリングします(この場合、date
を持つすべてのドキュメント) フィールド)。 -
2番目の部分
[{ $set: { date: { $add: ["$date", 24*60*60000] } } }]
は更新アグリゲーションパイプラインです(アグリゲーションパイプラインの使用を示す角かっこに注意してください)。$set
は新しい集計演算子であり、$addFields
のエイリアスです。 。次に、$set
内で任意の集計演算子を使用できます ステージ;この場合、単純な$add
既存の日付とミリ秒単位の日の表現との間の関係。