我正在使用PyMongo并尝试迭代我的MongoDB集合中的(1000万)文档,只提取几个键:" name"和"地址",然后将它们输出到.csv文件。
我无法用find()。forEach()
找出正确的语法我正在尝试像
这样的解决方法 cursor = db.myCollection.find({"name": {$regex: REGEX}})
其中REGEX会匹配所有内容 - 并导致" Killed"。 我也试过
cursor = db.myCollection.find({"name": {"$exist": True}})
但这也不起作用。
有什么建议吗?
答案 0 :(得分:4)
我无法用find()。forEach()
找出正确的语法
cursor.forEach()不适用于Python,它是一个JavaScript函数。你必须获得一个游标并迭代它。请参阅PyMongo Tutorial: querying for more than one document,您可以在哪里执行:
for document in myCollection.find():
print(document) # iterate the cursor
其中REGEX会匹配所有内容 - 并导致" Killed"。
不幸的是,这里缺乏信息来调试为什么以及什么' Killed'是。虽然如果你想匹配所有内容,你可以说:
cursor = db.myCollection.find({"name": {$regex: /.*/}})
鉴于字段name
包含字符串值。虽然使用$exists
来检查字段name
是否存在比使用正则表达式更好。
虽然在上面的示例中使用$exists运算符不正确。您在s
中遗漏了$exists
。不幸的是,遗憾的是,我们并不了解有关“无法运作”的信息。意在帮助进一步调试。
如果您正在为Python练习编写此脚本,我建议您查看:
您还可以MongoDB University为M101P: MongoDB for Python Developers注册免费在线课程。
但是,如果您只是想完成从集合中导出CSV的任务。作为替代方案,您可以使用MongoDB' mongoexport。哪个支持:
有关详细信息,请参阅mongoexport usage。
答案 1 :(得分:0)
我也没有对.find()。forEach()感到幸运,但这应该可以找到您要搜索的内容,然后打印出来。
首先查找与您要搜索的内容匹配的所有文档
cursors = db.myCollection.find({"name": {$regex: REGEX}})
然后遍历比赛
for cursor in cursors
print(cursor.get("name"))
答案 2 :(得分:0)
我想我知道了问题,但是我相信还没有准确的答案。我遇到了同样的挑战,这就是我的解决方法,尽管我不知道如何输出到.csv文件。对于我的情况,我需要JSON中的结果。这是我使用mongodb Projections解决您的问题的方法;
your_collection = db.myCollection
cursor = list(your_collection.find( { }, {"name": 1, "address": 1}))
第二行使用python list()
函数以列表形式返回结果。
然后您可以使用jsonify(cursor)
或仅将print(cursor)
用作列表。
我相信使用该列表应该更容易确定如何输出到.csv
。