Vous devez utiliser find
, comme vous l'êtes déjà, et non l'agrégation qui sera plus lente car elle doit analyser tout les valeurs des champs _id pour déterminer le maximum.
Comme les commentaires l'ont souligné, il n'y a non différence entre l'utilisation de find() et findOne() - fonctionnellement ou en termes d'élégance. En fait, findOne
dans le shell (et dans les pilotes qui l'implémentent) est défini en termes de find (avec limite -1 et avec joli print dans le shell).
Si vous vraiment veux faire l'équivalent de
db.collection.find().sort({_id:-1}).limit(1).pretty()
comme findOne
vous pouvez le faire avec cette syntaxe :
db.collection.findOne({$query:{},$orderby:{_id:-1}})