MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wie erhöht man viele Daten in MongoDB richtig?

Ab Mongo 4.2 , db.collection.update() kann eine Aggregationspipeline akzeptieren und schließlich die Aktualisierung eines Felds basierend auf seinem eigenen Wert ermöglichen; Dadurch werden ineffiziente Find/Foreach-Muster vermieden.

Außerdem haben Sie sich den $inc angesehen Operator, um einen Tag hinzuzufügen, aber jetzt, da wir eine Aggregationspipeline als Update verwenden können, ist der $add Operator kann verwendet werden:

// { "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" }
  • Der erste Teil { date : { $exists : true } } ist die Übereinstimmungsabfrage, die filtert, welche Dokumente aktualisiert werden sollen (in unserem Fall alle Dokumente mit dem date Feld).

  • Der zweite Teil [{ $set: { date: { $add: ["$date", 24*60*60000] } } }] ist die Aktualisierungsaggregationspipeline (beachten Sie die eckigen Klammern, die die Verwendung einer Aggregationspipeline anzeigen). $set ist ein neuer Aggregationsoperator und ein Alias ​​von $addFields . Dann kann jeder Aggregationsoperator innerhalb des $set verwendet werden Bühne; in unserem Fall ein einfaches $add zwischen dem vorhandenen Datum und der Darstellung eines Tages in Millisekunden.