J'utilise PyMongo et j'essaie d'itérer plus de (10 millions) de documents dans ma collection MongoDB et d'extraire juste quelques clés: "nom" et "adresse", puis de les exporter vers un fichier .csv.
Je ne peux pas trouver la bonne syntaxe pour le faire avec find (). ForEach ()
J'essayais des solutions de contournement comme
cursor = db.myCollection.find({"name": {$regex: REGEX}})
où REGEX correspondrait à tout - et cela a abouti à "Killed". J'ai aussi essayé
cursor = db.myCollection.find({"name": {"$exist": True}})
mais cela n'a pas fonctionné non plus.
Aucune suggestion?
Je ne peux pas trouver la bonne syntaxe pour le faire avec find (). ForEach ()
cursor.forEach () n'est pas disponible pour Python, c'est une fonction JavaScript. Vous devriez avoir un curseur et le parcourir. Voir Tutoriel PyMongo: interroger plusieurs documents , où vous pouvez faire:
for document in myCollection.find():
print(document) # iterate the cursor
où REGEX correspondrait à tout - et cela a abouti à "Killed".
Malheureusement, il y a un manque d'informations ici pour déboguer sur pourquoi et ce qu'est 'Killed'. Bien que si vous souhaitez tout faire correspondre, vous pouvez simplement déclarer:
cursor = db.myCollection.find({"name": {$regex: /.*/}})
Étant donné que le champ name
contient des valeurs de chaîne. Bien que vous utilisiez $exists
pour vérifier si le champ name
existe serait préférable à l'utilisation de regex.
Bien que l'utilisation de l'opérateur $ existe dans votre exemple ci-dessus soit incorrecte. Vous manquez un s
dans $exists
. Encore une fois, malheureusement, nous ne savons pas beaucoup d'informations sur ce qui "ne fonctionnait pas" signifiait pour aider au débogage.
Si vous écrivez ce script pour Python, je recommanderais de revoir:
Vous pouvez également vous inscrire à un cours en ligne gratuit à MongoDB University for M101P: MongoDB for Python Developers .
Cependant, si vous essayez simplement d'accomplir votre tâche d'exportation de CSV à partir d'une collection. Comme alternative, vous pouvez simplement utiliser mongoexport de MongoDB. Qui a le support pour:
Voir tilisation de mongoexport pour plus d'informations.
La méthode find()
renvoie un curseur PyMongo
, qui fait référence au jeu de résultats d'une requête.
Vous devez dé-référence, en quelque sorte, la référence (adresse).
Après cela, vous comprendrez mieux comment manipuler/gérer le curseur.
Essayez ce qui suit pour commencer:
result = db.*collection_name*.find()
print(list(result))
Je n'ai pas eu de chance avec .find (). ForEach () non plus, mais cela devrait trouver ce que vous cherchez et l'imprimer.
Tout d'abord trouvez tous les documents qui correspondent à ce que vous recherchez
cursors = db.myCollection.find({"name": {$regex: REGEX}})
puis itérer sur les correspondances
for cursor in cursors
print(cursor.get("name"))