Não consigo encontrar em nenhum lugar onde isso tenha sido documentado. Por padrão, a operação find () fará com que os registros sejam iniciados. Como posso obter os últimos N registros no mongodb?
Edit: também quero que o resultado retornado seja ordenado de menos recente para o mais recente, não o inverso.
Respostas:
Se eu entendi sua pergunta, você precisa classificar em ordem crescente.
Supondo que você tenha algum campo de identificação ou data chamado "x", você faria ...
.ordenar()
O 1 classificará ascendente (do mais antigo para o mais novo) e -1 classificará descendente (do mais recente para o mais antigo).
Se você usar o campo _id criado automaticamente, ele terá uma data incorporada ... para que você possa usá-lo para ordenar por ...
Isso retornará todos os seus documentos classificados do mais antigo para o mais novo.
Ordem natural
Você também pode usar uma ordem natural mencionada acima ...
Novamente, use 1 ou -1, dependendo da ordem desejada.
Use .limit ()
Por fim, é uma boa prática adicionar um limite ao fazer esse tipo de consulta aberta, para que você possa ...
ou
fonte
item = 3; item.add(3).divide(3) == 2; item.divide(3).add(3) == 4;
Sem ordem qual seria o resultado ??? Concordo com você que essa ordem inversa não é intuitiva. Afinal, não é um SQL, ele deve seguir os paradigmas normais de OO.Os últimos N registros adicionados, do menos recente ao mais recente, podem ser vistos com esta consulta:
Se você quiser na ordem inversa:
Se você instalar o Mongo-Hacker, também poderá usar:
Se você se cansar de escrever esses comandos o tempo todo, poderá criar funções personalizadas no seu ~ / .mongorc.js. Por exemplo
então a partir de um shell mongo basta digitar
last(N)
fonte
db.collection.find().reverse().limit(1)
me dá o erro... has no method reverse
Para obter os últimos N registros, você pode executar a consulta abaixo:
se você quiser apenas um último registro:
Nota: No lugar de $ natural, você pode usar uma das colunas da sua coleção.
fonte
você pode usar
sort()
,limit()
,skip()
para obter última N início registro de qualquer valor ignoradofonte
Você pode tentar este método:
Obtenha o número total de registros na coleção com
Então use pular:
fonte
Procure em Consulta: Classificação e ordem natural, http://www.mongodb.org/display/DOCS/Sorting+and+Natural+Order , bem como sort () em Cursor Methods http://www.mongodb.org/display / DOCS / Avançado + Consultas
fonte
Você não pode "pular" com base no tamanho da coleção, porque ela não levará em consideração as condições da consulta.
A solução correta é classificar a partir do ponto final desejado, limitar o tamanho do conjunto de resultados e ajustar a ordem dos resultados, se necessário.
Aqui está um exemplo, com base no código do mundo real.
fonte
var query = collection.find( { conditions } ).sort({$natural : -1}).reverse().limit(N)
.@ bin-chen,
Você pode usar uma agregação para as n entradas mais recentes de um subconjunto de documentos em uma coleção. Aqui está um exemplo simplificado sem agrupamento (o que você faria entre os estágios 4 e 5 neste caso).
Isso retorna as 20 entradas mais recentes (com base em um campo chamado "registro de data e hora"), classificadas em ordem crescente. Em seguida, ele projeta cada documento _id, timestamp e qualquer que seja_field_you_want_to_show nos resultados.
portanto, o resultado seria algo como:
Espero que isto ajude.
fonte
Classificar, pular etc. pode ser bem lento, dependendo do tamanho da sua coleção.
Um desempenho melhor seria alcançado se sua coleção fosse indexada por alguns critérios; e então você poderia usar o cursor min ():
Primeiro, indexe sua coleção com
db.collectionName.setIndex( yourIndex )
Você pode usar ordem crescente ou decrescente, o que é legal, porque você deseja sempre os "N últimos itens" ... portanto, se você indexar por ordem decrescente, é o mesmo que obter os "primeiros N itens" .Em seguida, você encontra o primeiro item da sua coleção e usa seus valores de campo de índice como os critérios mínimos em uma pesquisa como:
Aqui está a referência para o cursor min (): https://docs.mongodb.com/manual/reference/method/cursor.min/
fonte
db.collectionName.find().hint(yourIndex).limit(N)
Se o índice estiver em ordem decrescente, você obtém os N valores mínimos.Você pode usar as
find
opções: http://docs.meteor.com/api/collections.html#Mongo-Collection-findfonte
de acordo com a documentação do mongoDB :
fonte
use o operador $ slice para limitar os elementos da matriz
onde geolocalização é uma matriz de dados, obtemos os últimos 5 registros.
fonte
A última função deve ser
sort
, nãolimit
.Exemplo:
fonte
sort
seria depoislimit
?