MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Mongodb trouve la commande de documents de retour

Les documents sont stockés dans l'ordre naturel

Les documents sont stockés par ordre décroissant en fonction de la date. La collection a donc 20140731 comme premier document.

Sauf si vous utilisez une collection limitée, il n'y a aucune garantie pour l'ordre des documents sur disque (également appelé ordre naturel).

Les suppressions et les déplacements de documents (lorsqu'un document dépasse son espace d'enregistrement alloué) créent de l'espace sur la liste libre qui sera réutilisé.

Voici un exemple rapide qui devrait le démontrer dans le mongo coque :

// 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()

Ordre des résultats

Lorsque j'utilise la commande find avec des filtres {$gte :20140720, $lte :20140731}, mongodb renvoie la requête dans l'ordre croissant du champ "date".

Si un index est utilisé pour une requête, les documents sont renvoyés dans l'ordre dans lequel ils se trouvent dans l'index. Vous devriez en tirer parti lors de la construction de vos index pour les requêtes courantes (voir :Utiliser les index pour trier les résultats des requêtes).

Pour info, un index simple (ex. le {date:1} ) peut être utilisé pour renvoyer les résultats triés par ordre croissant ou décroissant.

Trier par ObjectID

Si vous utilisez les ObjectID par défaut de MongoDB pour _id , vous pouvez trier par { _id: 1 } pour approximer l'ordre d'insertion depuis les 4 premiers octets de l'ObjectID intégrer un horodatage. Si vous vouliez l'utiliser pour trier une requête basée sur date et l'ordre d'insertion approximatif, vous garantiriez un index le {date:1, _id:1} .

Notez que ObjectID s sont généralement générés par le pilote client, donc si vous avez une dérive d'horloge sur vos serveurs d'application (ou le _id est créé quelque temps avant l'insertion du document) le ObjectID s peuvent ne pas refléter strictement "l'ordre d'insertion" tel qu'il est vu par le serveur. Si la précision de l'ordre d'insertion est très importante, il est généralement possible de générer le _id côté serveur (l'approche varie selon le pilote).