2013-01-07 2 views
0

Je ne sais pas comment chercher dans une plage d'id en utilisant mongodb (id représente l'ordre d'insertion dans la base de données).Mongodb trie par id de la plage de création

Exemple: Je veux regarder à partir id élément 0 à id élément 19 -> 20 premiers éléments

Depuis i`m stockage ObjectId, comment puis-je regarder pour ce genre de recherche?

Ma structure:

{ "_id": ObjectId ("50e9ccb30364a89b9b286f7a"), "dataCriacao": Date (1357499571496), "email": "[email protected]", "nome": " Daniel "," version ": 0}

Est-ce que je dois créer un numéro d'identification séparé?

Merci,

Daniel

Répondre

1

Vous pouvez trier et filtrer par _id tout comme vous pouvez avec tout autre domaine. Pour obtenir la première 20:

db.test.find().sort({_id: 1}).limit(20) 

Cependant, alors que ObjectId valeurs commencent par une seconde horodatage de résolution de leur création, qui ne garantit pas qu'ils sont strictement commandés par le temps de création si les enregistrements sont créés par plusieurs Les clients sous la forme ObjectId sont généralement créés côté conducteur (par opposition à centralement par le serveur MongoDB).

0

Pour trouver les 20 premiers utilisateurs (par exemple):

db.users.find().limit(20) 

Si vous voulez faire une recherche entre par exemple ObjectId("50ea0918ec661588c2000001") et ObjectId("50ea0918ec661588c200000c"):

db.users.find({ _id: { $gt: ObjectId("50ea0918ec661588c2000001"), $lt: ObjectId("50ea0918ec661588c200000c") } }) 

Cependant, la ObjectId est générée en fonction d'un certain nombre de champs (voir le lien). Il n'y a aucune garantie qu'ils seront dans un ordre logique.

+0

Ok, donc juste pour obtenir directement, si je fais: db.users.find ({_ id: 1}). limit (20) et que db.users.find ({_ id: 20}). limit (20) rien de garanti je vais obtenir 40 éléments distincts de base de données? – user1953756

+0

Non, puisque _id: 20 n'existera jamais. La valeur par défaut de _id est similaire à '50ea0918ec661588c2000001'. Vous pouvez cependant faire db.users.find ({_id: {$ gt: }}). Limit (20). Cela retournera 20 documents avec un ObjectId plus grand que le dernier que vous avez tiré dans la requête précédente. La requête est triée par _id par défaut. –

1

Ajoutez un champ de date CreatedOn et triez dessus.

tri sur une Id est une mauvaise idée car:
- ils ne sont pas garantis d'être incrémentale
- ils sont Ment de ne pas être utilisé comme valeur commerciale

Questions connexes