2016-11-30 36 views
1

我使用PyMongo並試圖迭代MongoDB集合中的(10百萬)文檔,並提取幾個鍵:「name」和「address」,然後將它們輸出到.csv文件。Pymongo:迭代集合中的所有文檔

我無法找出正確的語法與find做()的forEach()

我試圖像

變通
cursor = db.myCollection.find({"name": {$regex: REGEX}}) 

其中正則表達式會匹配一切 - 它導致了「封殺」。 我也試過

cursor = db.myCollection.find({"name": {"$exist": True}}) 

但這也沒有工作。

有什麼建議嗎?

+0

什麼是您的實際查詢或您想要的結果?請稍微解釋一下。 – sergiuz

+0

我不確定你是否嘗試過或不嘗試地圖縮減作業來完成你的工作。考慮到龐大的數據集,它似乎是一個更好的選擇。它只是一個建議。 – user1211

回答

1

我無法找出正確的語法與find做()。forEach()這樣

cursor.forEach()不適用於Python的,這是一個JavaScript函數。你必須得到一個遊標並重復它。見PyMongo Tutorial: querying for more than one document,在這裏你可以這樣做:

for document in myCollection.find(): 
    print(document) # iterate the cursor 

其中正則表達式會匹配一切 - 它導致了「封殺」。

不幸的是,在這裏沒有足夠的信息來調試爲什麼和什麼是'殺死'。但如果你想匹配的一切,你可以狀態:

cursor = db.myCollection.find({"name": {$regex: /.*/}}) 

鑑於場name包含字符串值。儘管使用$exists來檢查字段name是否比使用正則表達式更好。

儘管在上例中使用$exists運算符不正確。您在$exists中缺少s。再次,不幸的是,我們不知道什麼「沒有工作」意味着幫助進一步調試。

如果你在寫這個劇本的Python鍛鍊,我會建議審查:

你也可以在MongoDB University報名參加一個免費的在線課程M101P: MongoDB for Python Developers

但是,如果您只是試圖完成從集合中導出CSV的任務。作爲替代方案,您可以使用MongoDB的mongoexport。這對於支持:

通過--type "csv"

  • 導出與查詢中的特定值CSV導出見mongoexport usage以獲取更多信息。