Quando executamos uma consulta find () do Mongo sem nenhuma ordem de classificação especificada, o que o banco de dados usa internamente para classificar os resultados?
De acordo com a documentação no site do mongo :
Ao executar um find () sem parâmetros, o banco de dados retorna objetos em ordem natural direta.
Para tabelas padrão, a ordem natural não é particularmente útil porque, embora a ordem geralmente esteja próxima da ordem de inserção, não é garantido que seja. No entanto, para coleções limitadas, a ordem natural é garantida como o pedido de inserção. Isso pode ser muito útil.
No entanto, para coleções padrão (coleções sem limite), qual campo é usado para classificar os resultados? É o campo _id ou algo mais?
Editar:
Basicamente, acho que o que estou tentando chegar é se eu executar a seguinte consulta de pesquisa:
db.collection.find({"x":y}).skip(10000).limit(1000);
Em dois momentos diferentes: t1 e t2 , irei obter conjuntos de resultados diferentes:
- Quando não houve gravações adicionais entre t1 e t2?
- Quando houve novas gravações entre t1 e t2?
- Existem novos índices que foram adicionados entre t1 e t2?
Eu executei alguns testes em um banco de dados temporário e os resultados que obtive são os mesmos ( Sim ) para todos os 3 casos - mas eu queria ter certeza e tenho certeza de que meus casos de teste não foram muito completos.
{createdAt: -1}
) é necessário para implementar padrões de UI otimistas (atualizar listas de dados no cache sem esperar pela resposta do servidor após criar / atualizar / excluir). Caso contrário, você não pode combinar a ordem otimista do lado do cliente e a ordem de resposta do servidor.Ele é retornado na ordem armazenada (ordem no arquivo), mas não é garantido que eles estejam na ordem inserida. Eles não são classificados pelo campo _id. Às vezes, pode parecer que está classificado pelo pedido de inserção, mas pode ser alterado em outra solicitação. Não é confiável.
fonte