sql >> Database >  >> NoSQL >> MongoDB

Hoe de laatste update / insert / delete-bewerkingstijd op mongodb-verzameling te vinden zonder objectid-veld?

Om een ​​lang verhaal kort te maken:MongoDB heeft een flexibele schema. Voeg eenvoudig een datumveld toe. Omdat oudere items het niet hebben, kunnen ze niet het laatste item zijn.

Laten we dat veld mtime . noemen .

Dus na het toevoegen van een datumveld aan uw schemadefinitie, genereren we een index in aflopende volgorde op het nieuwe veld:

db.yourCollction.createIndex({mtime:-1})

Het is nu eenvoudig om de laatste tijd voor een ophaling te vinden:

db.yourCollection.find({"mtime":{"$exists":true}}).sort({"mtime":-1}).limit(1)

Doe dit voor elke collectie. Als de bovenstaande query geen waarde retourneert binnen het tijdsbestek dat u hebt gedefinieerd voor het opschonen van een verzameling, kunt u deze gewoon laten vallen, aangezien deze niet is gewijzigd sinds u het veld mtime heeft ingevoerd.

Nadat uw collecties zijn opgeschoond, kunt u de mtime . verwijderen veld uit uw schemadefinitie. Om het uit de documenten te verwijderen, kunt u een eenvoudige zoekopdracht uitvoeren:

db.yourCollection.update(
  { "mtime":{ $exists:true} },
  { "$unset":{ "mtime":""} },
  { multi: true}
)


  1. Wat is de meest tijdbesparende manier om een ​​datatabel te serialiseren/deserialiseren van/naar Redis?

  2. Mongoose-schema met genest optioneel object

  3. Caching in Django met Redis

  4. Hoe kan ik MongoWaitQueueFullException oplossen?