web-dev-qa-db-fra.com

MongoDB: Comment obtenir le dernier horodatage mis à jour du dernier document mis à jour dans une collection

Existe-t-il une méthode simple OR élégante (ou une requête que je peux écrire) pour récupérer le dernier horodatage mis à jour (du dernier document mis à jour) dans une collection. Je peux écrire une requête comme celle-ci pour trouver le dernier document inséré

db.collection.find().limit(1).sort({$natural:-1})

mais j'ai besoin d'informations sur le dernier document mis à jour (il peut s'agir d'un insert ou d'une mise à jour). 

Je sais qu'un moyen consiste à interroger la collection oplog pour le dernier enregistrement d'une collection. Mais cela semble être une opération coûteuse compte tenu du fait que oplog pourrait être de très grande taille (également non fiable car il s’agit d’une collection limitée). Y a-t-il une meilleure manière de faire cela? 

Merci!

4
void

Vous pouvez obtenir la dernière insertion de la même manière que celle que vous avez mentionnée dans la question: 

db.collection.find().sort({'_id': -1}).limit(1) 

Mais, il n'y a pas de bon moyen de voir la dernière heure de mise à jour/supprimer. Mais, si vous utilisez des jeux de réplicas, vous pouvez obtenir cela à partir de la variable oplog

Vous pouvez également ajouter un nouveau champ dans le document sous la forme 'lastModified'. Vous pouvez également extraire collection-hooks . J'espère que cela aidera

4
Anirudh Bagri
  1. Une façon de s'y prendre est de disposer d'un champ contenant l'heure de la dernière mise à jour. Vous pouvez le nommer updatedAt. Chaque fois que vous apportez une mise à jour au document, vous mettez à jour la valeur en fonction de l'heure actuelle. Si vous utilisez le format ISO pour stocker l'heure, vous pourrez trier sans problème (c'est ce que j'utilise).

  2. L'autre façon est le champ _id.

Méthode 1 db.collection.find (). Limit (1) .sort ({updatedAt: -1})

Méthode 2 db.collection.find (). Limit (1) .sort ({_ id: -1})

1
Balocodes