Mongodb Pymongo:迭代集合中的所有文档
我正在使用PyMongo,试图在我的MongoDB集合中迭代(1000万)个文档,只提取几个键:“name”和“address”,然后将它们输出到.csv文件 我无法找到使用find()执行此操作的正确语法 我在尝试一些变通办法,比如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":
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格式导出,通过
- 通过查询导出特定值
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}))
第二行使用pythonlist()
函数将结果作为列表返回
然后您可以使用jsonify(游标)
或只是print(游标)
作为列表
我相信有了这个列表,就可以更容易地了解如何输出到
.csv
您的实际查询或期望的结果是什么?请解释得更清楚一点。我不确定您是否尝试过此操作,请尝试使用map reduce作业来完成您的工作。考虑到庞大的数据集,这似乎是一个更好的选择。这只是一个建议。