sql >> Database >  >> NoSQL >> MongoDB

Hoe verhoogt men op de juiste manier veel datums in mongoDB?

Beginnend in Mongo 4.2 , db.collection.update() kan een aggregatiepijplijn accepteren, waardoor uiteindelijk een veld kan worden bijgewerkt op basis van zijn eigen waarde; waardoor inefficiënte zoek-/foreach-patronen worden vermeden.

Je keek ook naar de $inc operator om een ​​dag toe te voegen, maar nu we een aggregatiepijplijn als update kunnen gebruiken, is de $add operator kan worden gebruikt:

// { "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" }
  • Het eerste deel { date : { $exists : true } } is de match-query, die filtert welke documenten moeten worden bijgewerkt (in ons geval alle documenten met de date veld).

  • Het tweede deel [{ $set: { date: { $add: ["$date", 24*60*60000] } } }] is de update-aggregatiepijplijn (let op de vierkante haakjes die het gebruik van een aggregatiepijplijn aangeven). $set is een nieuwe aggregatie-operator en een alias van $addFields . Dan kan elke aggregatie-operator worden gebruikt binnen de $set fase; in ons geval een simpele $add tussen de bestaande datum en de weergave van een dag in milliseconden.



  1. MongoDB opvragen om overeen te komen in het eerste item in een array

  2. Geneste arrays bijwerken in mongodb

  3. mongo kopiëren van de ene collectie naar de andere (op dezelfde db)

  4. docker-compose + django + redis - Fout 111 bij verbinding met 127.0.0.1:6379. Verbinding geweigerd