Je veux connaître l'enregistrement le plus récent d'une collection. Comment faire ça?
Remarque: je sais que les requêtes de ligne de commande suivantes fonctionnent:
1. db.test.find().sort({"idate":-1}).limit(1).forEach(printjson);
2. db.test.find().skip(db.test.count()-1).forEach(printjson)
où idate a ajouté l'horodatage.
Le problème est que plus la collecte est le temps de récupérer les données et ma collection «test» est vraiment vraiment énorme. J'ai besoin d'une requête avec une réponse en temps constant.
S'il y a une meilleure requête de ligne de commande mongodb, faites-le moi savoir.
mongodb
mongodb-query
inkriti
la source
la source
db.collection.find().limit(1).sort({$natural:-1}).pretty()
si vous voulez qu'il soit beaudb.collection.find().sort({$natural:-1}).limit(1).pretty()
Query failed with error code 303 and error message 'option $natural is not supported' on server docdb
. Espérons que cette fonctionnalité sera bientôt disponible.Cela vous donnera un dernier document pour un
collection
$natural:-1
signifie l'ordre opposé à celui dans lequel les enregistrements sont insérés.Edit : Pour tous les downvoters, ci-dessus est une syntaxe Mongoose, la syntaxe mongo CLI est:
db.collectionName.find({}).sort({$natural:-1}).limit(1)
la source
Par défaut, les index de MongoDB sont des B-Trees. La recherche d'un arbre B est une opération O (logN), donc même
find({_id:...})
ne fournira pas de réponses à temps constant, O (1).Cela dit, vous pouvez également trier par
_id
si vous utilisezObjectId
pour vos identifiants. Voir ici pour plus de détails . Bien sûr, même cela n'est bon que jusqu'à la dernière seconde.Vous pouvez recourir à «écrire deux fois». Écrivez une fois dans la collection principale et réécrivez dans une collection "dernière mise à jour". Sans transactions, ce ne sera pas parfait, mais avec un seul article dans la collection «dernière mise à jour», ce sera toujours rapide.
la source
Encore une autre façon d'obtenir le dernier élément d'une collection MongoDB (ne vous inquiétez pas des exemples):
Projection normale
Projection triée (_id: ordre inverse)
sort({'_id':-1})
, définit une projection dans l'ordre décroissant de tous les documents, en fonction de leur_id
s.Projection triée (_id: ordre inverse): obtention du dernier (dernier) document d'une collection.
la source
php7.1 mongoDB:
$data = $collection->findOne([],['sort' => ['_id' => -1],'projection' => ['_id' => 1]]);
la source
Ma solution:
db.collection("name of collection").find({}, {limit: 1}).sort({$natural: -1})
la source
Voici comment obtenir le dernier enregistrement de tous les documents MongoDB de la collection "foo" (changez foo, x, y .. etc.)
vous pouvez ajouter ou supprimer du groupe
articles d'aide: https://docs.mongodb.com/manual/reference/operator/aggregation/group/#pipe._S_group
https://docs.mongodb.com/manual/reference/operator/aggregation/last/
la source
Si vous utilisez des identifiants d'objets Mongo générés automatiquement dans votre document, il contient un horodatage sous forme de 4 premiers octets en utilisant le dernier document inséré dans la collection. Je comprends que c'est une vieille question, mais si quelqu'un finit toujours ici à la recherche d'une autre alternative.
La requête ci-dessus donnerait le _id du dernier document inséré dans la collection
la source