Mongodb Pymongo:迭代集合中的所有文档

Mongodb Pymongo:迭代集合中的所有文档,mongodb,cursor,pymongo,Mongodb,Cursor,Pymongo,我正在使用PyMongo,试图在我的MongoDB集合中迭代(1000万)个文档,只提取几个键:“name”和“address”,然后将它们输出到.csv文件 我无法找到使用find()执行此操作的正确语法 我在尝试一些变通办法,比如 cursor = db.myCollection.find({"name": {$regex: REGEX}}) REGEX可以匹配所有东西,结果是“被杀”。 我也试过了 cursor = db.myCollection.find({"name":

我正在使用PyMongo,试图在我的MongoDB集合中迭代(1000万)个文档,只提取几个键:“name”和“address”,然后将它们输出到.csv文件

我无法找到使用find()执行此操作的正确语法

我在尝试一些变通办法,比如

   cursor = db.myCollection.find({"name": {$regex: REGEX}})
REGEX可以匹配所有东西,结果是“被杀”。 我也试过了

   cursor = db.myCollection.find({"name": {"$exist": True}})
但这也不起作用

有什么建议吗

我无法找到使用find()执行此操作的正确语法

不适用于Python,它是一个JavaScript函数。您必须获得一个游标并在其上进行迭代。请参见,您可以执行以下操作:

for document in myCollection.find():
    print(document) # iterate the cursor
REGEX可以匹配所有东西,结果是“被杀”

不幸的是,这里缺少调试“被杀”的原因和原因的信息。尽管如果您希望匹配所有内容,您可以只声明:

cursor = db.myCollection.find({"name": {$regex: /.*/}}) 
假设字段
name
包含字符串值。尽管使用
$exists
检查字段
name
是否存在比使用regex更可取

而在上面的示例中,运算符的使用是不正确的。您在
$exists
中缺少一个
s
。同样,不幸的是,我们不知道什么“不起作用”有助于进一步调试

如果您正在为Python练习编写此脚本,我建议您回顾一下:

你也可以在为注册一个免费的在线课程

但是,如果您只是试图完成从集合导出CSV的任务。作为替代,您可以使用MongoDB。它支持:

  • 通过导出特定字段
  • 以CSV格式导出,通过
  • 通过查询导出特定值
有关更多信息,请参阅

我也没有找到.find().forEach(),但这应该可以找到您正在搜索的内容,然后打印出来

首先查找与搜索内容匹配的所有文档

cursors = db.myCollection.find({"name": {$regex: REGEX}})
然后对匹配项进行迭代

for cursor in cursors
    print(cursor.get("name"))
find()
方法返回一个
PyMongo
游标,它是对查询结果集的引用

您必须取消引用,不知何故,引用(地址)

之后,您将更好地了解如何操作/管理光标

首先,请尝试以下操作:

result = db.*collection_name*.find()
print(list(result)) 

我想我明白了这个问题,但我相信还没有准确的答案。我也遇到了同样的挑战,这就是我如何做到的,尽管我不知道如何输出到.csv文件。对于我的情况,我需要JSON中的结果。以下是我使用mongodb投影对您的问题的解决方案

your_collection = db.myCollection
cursor = list(your_collection.find( { }, {"name": 1, "address": 1}))
第二行使用python
list()
函数将结果作为列表返回

然后您可以使用
jsonify(游标)
或只是
print(游标)
作为列表


我相信有了这个列表,就可以更容易地了解如何输出到
.csv

您的实际查询或期望的结果是什么?请解释得更清楚一点。我不确定您是否尝试过此操作,请尝试使用map reduce作业来完成您的工作。考虑到庞大的数据集,这似乎是一个更好的选择。这只是一个建议。