Usando findOne in mongodb per ottenere l’elemento con ID max

Sto cercando di recuperare un elemento da una raccolta mongo, quella con il più grande campo _id. So che questo può essere fatto interrogando:

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

Ma sembra un po ‘poco elegante e mi chiedevo se c’è un modo per ottenere quell’elemento specifico usando findOne ()

Nota: Voglio farlo perché, da quello che ho letto in ObjectId , i primi byte corrispondono ai millisecondi dall’Epoch e quindi, l’ultimo elemento inserito avrà il _id più grande. C’è un altro modo per recuperare l’ultimo elemento inserito in una collezione?

Dovresti usare find , come lo sei già, e non l’aggregazione che sarà più lenta dal momento che è necessario analizzare tutti i valori dei campi _id per calcolare il massimo.

Come hanno sottolineato i commenti, non c’è differenza tra l’uso di find () e findOne () – dal punto di vista funzionale o dell’eleganza. Infatti, findOne nella shell (e nei driver che lo implementano) è definito in termini di find (con limite -1 e con pretty print nella shell).

Se vuoi davvero fare l’equivalente di

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

come findOne puoi farlo con questa syntax:

 db.collection.findOne({$query:{},$orderby:{_id:-1}}) 

Puoi ottenere _id max utilizzando l’aggregazione di mongodb. Trova e ordina potrebbe essere eccessivo.

 db.myCollection.aggregate({ $group: { _id: '', last: { $max: "$_id" } } }); 

con il driver PHP (mongodb)
utilizzando findOne()

 $filter=[]; $options = ['sort' => ['_id' => -1]]; // -1 is for DESC $result = $collection->findOne(filter, $options); $maxAge = $result['age'] 
 $maxId=""; $Cursor =$collection->find(); foreach($cursor as $document) { $maxid =max($arr=(array($document['id']))); } print_r($maxid+1);