sql >> Base de Datos >  >> NoSQL >> MongoDB

Orden de devolución de documentos de búsqueda de Mongodb

Los documentos se almacenan en orden natural

Los documentos se almacenan en orden descendente según la fecha. Entonces la colección tiene 20140731 como primer documento.

A menos que esté utilizando una colección limitada, no hay garantía para el orden de los documentos en el disco (también conocido como orden natural).

Las eliminaciones y movimientos de documentos (cuando un documento supera su espacio de registro asignado) crean espacio en la lista libre que se reutilizará.

Aquí hay un ejemplo rápido que debería demostrar esto en mongo concha:

// Start with an empty database & collection
use demodb; db.dropDatabase(); db.order.drop()

// Add some test data
for (i=0; i<1000; i++) {
    db.order.insert({'i': i})
}

// Looks like insertion order! (0..9)
db.order.find({}).limit(10);

// Pause 5s for effect :)
sleep(5000);

// Remove half the entries
db.order.remove({ i: { $lt: 500 }})

// Re-add the missing entries
for (i=0; i<500; i++) {
    db.order.insert({'i': i})
}

// Not the entries you expected .. space from deleted records was reused
db.order.find({}).limit(10)

// Clean up demodb
db.dropDatabase()

Orden de resultados

Cuando uso el comando de búsqueda con filtros {$gte:20140720, $lte:20140731}, mongodb devuelve la consulta en orden ascendente del campo "fecha".

Si se utiliza un índice para una consulta, los documentos se devuelven en el orden en que se encuentran en el índice. Debería aprovechar esto cuando construya sus índices para consultas comunes (consulte:Usar índices para ordenar los resultados de las consultas).

FYI, un índice simple (por ejemplo, en {date:1} ) se puede utilizar para devolver los resultados ordenados en orden ascendente o descendente.

Ordenar por ID de objeto

Si está utilizando los ObjectID predeterminados de MongoDB para _id , puede ordenar por { _id: 1 } para aproximar el orden de inserción desde los primeros 4 bytes del ObjectID incorporar una marca de tiempo. Si quisiera usar esto para ordenar una consulta basada en date y el orden de inserción aproximado en el que garantizaría un índice en {date:1, _id:1} .

Tenga en cuenta que ObjectID Normalmente, el controlador del cliente genera correos electrónicos, por lo que si tiene una desviación del reloj en los servidores de su aplicación (o el _id se crea algún tiempo antes de que se inserte el documento) el ObjectID Es posible que los correos electrónicos no reflejen estrictamente el "orden de inserción" tal como lo ve el servidor. Si la precisión del pedido de inserción es muy importante, generalmente es posible generar el _id en el lado del servidor (el enfoque varía según el controlador).