Obtenir la position du document sélectionné dans la collection [mongoDB]
Comment obtenir la position (index) de document sélectionné dans mongo collection?
E. g.
ce document: db.myCollection.find({"id":12345})
a l'index 3
dans myCollection
myCollection:
id: 12340, name: 'G'
id: 12343, name: 'V'
id: 12345, name: 'A'
id: 12348, name: 'N'
Vous devez vous connecter pour publier un commentaire.
Si votre exigence est de trouver la position du document, indépendamment de tout ordre, qui n'est pas
possible que MongoDb ne pas stocker les documents dans un ordre précis.
Toutefois,si vous voulez connaître l'indice basé sur un certain domaine, dire
_id
, vous pouvez utiliser cette méthode.Si vous êtes en suivant strictement auto incrémente dans votre
_id
champ. Vous pouvez compter tous les documentsqui ont une valeur moindre que les
_id
, disons n , alors n + 1 serait index du document basé sur_id
.Ce serait également valable si les documents sont supprimés à partir de la collection.
db.collection.find({_id: {$lte: ObjectId("12345")}}).count()
de commande pour obtenir la position... je veux dire moins que l'égalité est plus spécifique à cela.Autant que je sache, il n'y a pas de commande unique pour le faire, et cela est impossible dans le cas général (voir Derick réponse). Cependant, l'utilisation de
count()
pour une requête effectuée sur un ordre de valeur d'id champ qui semble fonctionner. Avertissement: ceci suppose qu'il existe une façon fiable ordonne de champ, ce qui est difficile à réaliser dans un tel cas writer. Dans cet exemple_id
est utilisé, cependant, cela ne fonctionne qu'avec un seul écrivain cas.:Cela devrait également être assez rapide si la requête de champ est indexé. L'exemple est dans le shell mongo, mais
count()
devrait être disponible dans tous les pilote libs ainsi.Cela peut être très lent, mais simple méthode. Ici vous pouvez passer comme d'habitude requête. Juste que je suis en boucle tous les documents et de vérifier si la condition de correspondre à l'enregistrement. Ici, je suis à vérifier avec le champ _id. Vous pouvez utiliser n'importe quel autre champ unique ou de multiples domaines à vérifier.
Il n'y a aucun moyen que MongoDB peut rendre ce qu'il ne conserve pas les documents dans l'ordre dans la base de données comme MySQL.f.e. n'a pas de nom, les numéros de ligne.
De l'ObjectID truc de jhonkola ne fonctionnera que si un seul client crée de nouveaux éléments, comme la ObjectIDs sont générés sur le côté client, avec la première partie étant un timestamp. Il n'y a pas de garantie d'ordre si différent de clients à parler sur le même serveur. Encore, je ne voudrais pas compter sur cet.
Je n'ai pas très bien compris ce que vous essayez de faire, alors peut-être mentionner que dans votre question? Je peux ensuite mettre à jour la réponse.
Restructurer votre collection d'inclure la position de chaque entrée, j'.e {'id': 12340, "nom": "G", "position": 1}, puis lors de la recherche de la base de données de la collection(myCollection) à l'aide de la position désirée comme une requête
Les requêtes-je me servir de retourner l'intégralité de la collection, l'utilisation de tri pour obtenir une reproductibilité ordonnance, trouver des.de tri.forEach fonctionne avec le script ci-dessus pour obtenir le bon indice.