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);