Quero saber o registro mais recente de uma coleção. Como fazer isso?
Observação: eu sei que as seguintes consultas de linha de comando funcionam:
1. db.test.find().sort({"idate":-1}).limit(1).forEach(printjson);
2. db.test.find().skip(db.test.count()-1).forEach(printjson)
onde idate tem o carimbo de data / hora adicionado.
O problema é que a coleta é mais longa, é o tempo para recuperar os dados e minha coleta de 'teste' é realmente muito grande. Preciso de uma consulta com resposta em tempo constante.
Se houver alguma consulta de linha de comando mongodb melhor, me avise.
mongodb
mongodb-query
Inkriti
fonte
fonte
db.collection.find().limit(1).sort({$natural:-1}).pretty()
se você quiser que fique bonitodb.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
. Esperançosamente, esse recurso será lançado em breve.Isso lhe dará um último documento para um
collection
$natural:-1
significa ordem oposta àquela em que os registros são inseridos.Edit : Para todos os downvoters, acima é uma sintaxe Mongoose, a sintaxe mongo CLI é:
db.collectionName.find({}).sort({$natural:-1}).limit(1)
fonte
Por padrão, os índices no MongoDB são árvores B. Pesquisar uma B-Tree é uma operação O (logN), então nem mesmo
find({_id:...})
fornecerá tempo constante, respostas O (1).Dito isso, você também pode classificar por
_id
se estiver usandoObjectId
para seus IDs. Veja aqui os detalhes . Claro, mesmo isso só é bom até o último segundo.Você pode recorrer a "escrever duas vezes". Escreva uma vez para a coleção principal e escreva novamente para uma coleção "atualizada pela última vez". Sem transações isso não será perfeito, mas com apenas um item na coleção "última atualização" sempre será rápido.
fonte
Mais uma maneira de obter o último item de uma coleção MongoDB (não se preocupe com os exemplos):
Projeção Normal
Projeção classificada (_id: ordem inversa)
sort({'_id':-1})
, define uma projeção em ordem decrescente de todos os documentos, com base em seus_id
s.Projeção classificada (_id: ordem inversa): obtendo o documento mais recente (último) de uma coleção.
fonte
php7.1 mongoDB:
$data = $collection->findOne([],['sort' => ['_id' => -1],'projection' => ['_id' => 1]]);
fonte
Minha solução:
db.collection("name of collection").find({}, {limit: 1}).sort({$natural: -1})
fonte
Se você estiver usando Ids de objeto Mongo gerados automaticamente em seu documento, ele contém o carimbo de data / hora como os primeiros 4 bytes, usando o documento mais recente inserido na coleção que pôde ser encontrado. Eu entendo que essa é uma pergunta antiga, mas se alguém ainda está acabando aqui procurando mais uma alternativa.
A consulta acima forneceria o _id para o documento mais recente inserido na coleção
fonte
Veja como obter o último registro de todos os documentos MongoDB da coleção "foo". (Altere foo, x, y .. etc.)
você pode adicionar ou remover do grupo
artigos de ajuda: https://docs.mongodb.com/manual/reference/operator/aggregation/group/#pipe._S_group
https://docs.mongodb.com/manual/reference/operator/aggregation/last/
fonte