Comment puis-je obtenir tous les doc id dans MongoDB?
Comment puis-je obtenir un tableau de tous les doc id dans MongoDB? J'ai seulement besoin d'un ensemble d'id mais pas le doc contenu.
db.c.find({},{_id:1});
devrait le fairece que le find() a retourné est un curseur, je ne vois pas de toute façon à récupérer tous les id (mais pas les docs, comme curseur.toArray ()) de l'retourné curseur.
Depuis MongoDB communique dans BFILS je ne pense pas que ce que vous voulez, c'est possible sans épuiser le curseur, puis en filtrant les valeurs
OriginalL'auteur user2793120 | 2013-09-18
Vous devez vous connecter pour publier un commentaire.
Vous pouvez le faire dans le shell Mongo en appelant
map
sur le curseur comme ceci:Le résultat est que
a
est un tableau de tout les_id
valeurs.La façon dont il fonctionne dans le Nœud est similaire.
(C'est MongoDB Nœud pilote
v2.2
, et le Nœudv6.7.0
)N'oubliez pas de mettre
map
avanttoArray
que cemap
n'est PAS le JavaScriptmap
fonction, mais il est celui fourni par MongoDB et il s'exécute dans la base de données avant que le curseur est retourné.OriginalL'auteur JohnnyHK
Une façon est d'utiliser simplement le runCommand API.
qui vous donne quelque chose comme ceci:
Cependant, il y a encore plus agréable à l'aide de la réelle
distinct
API:qui vous donne un tableau d'id:
Pas sûr au sujet de la première version, mais celle-ci est certainement pris en charge dans le Node.js pilote (j'ai vu que vous mentionner que vous vouliez l'utiliser). Qui ressemblerait à quelque chose comme ceci:
c'est possible... mais j'imagine que les OP ne voulant faire sur un petit jeu de données, il est donc probablement pas une grosse affaire. D'autre part, il évite d'avoir à en boucle tous les résultats afin de les protéger de retour dans un tableau sur le client.
ce peut/va provoquer une erreur comme
Command failed with error 17217: 'distinct too big, 16mb cap' on server
sur grand jeu de donnéesOriginalL'auteur whitfin
Une autre façon de le faire sur mongo console pourrait être:
Espère que ça aide!!!
Merci!!!
OriginalL'auteur Anuj Aneja
Aussi je me demandais comment faire avec MongoDB Node.JS conducteur, comme @user2793120. Quelqu'un d'autre a dit qu'il devrait parcourir les résultats .chaque qui semblait très inefficace pour moi. J'ai utilisé MongoDB l'agrégation d' à la place:
La phase de tri sélectif est en option. La partie, ainsi si vous voulez tous de la collection _ids. Si vous console.journal du résultat, vous devriez voir quelque chose comme:
Alors utilisez simplement le contenu de result[0].id quelque part d'autre.
La clé est ici la $section groupe de. Vous devez définir une valeur nulle pour _id (sinon, l'agrégation de crash), et de créer un nouveau tableau de terrain avec tous les _ids. Si vous ne me dérange pas d'avoir dupliqué id (en fonction de vos critères de recherche utilisés dans le $match de la phase, et en supposant que vous êtes un groupement autre que le champ _id qui a aussi un autre document _id), vous pouvez utiliser $pousser au lieu de $addToSet.
OriginalL'auteur Lucio Mollinedo