2017-01-12 40 views
1

我想將一個Mongo數據庫的數據轉儲到一個csv/excel文件中。 我的數據庫有幾個文檔具有相同的字段和嵌入的字段。我希望每個嵌入字段都是我的csv文件的一列,每個文檔都只有一行。 這裏是我們的目標:在一個csv文件中轉儲Mongo數據庫

a_cursor = a_collection.find(filter, projection) # pymongo.collection.find() method 
a_csv_file = print_cursor_to_csv(a_cursor,projection) # the method I would like to create 
  • 隨着發現的過濾器參數(),我將能夠過濾蒙戈文件。
  • 通過find()的投影參數,我將選擇要放入csv列的字段。
  • 投影參數在print_cursor_to_csv()中再次使用,這次只是爲了給出csv文件的字段/列的順序。事實上,投影是一個字段列表,第一個字段將是第一個csv列。

這裏是我寫的方法:

def _print_cursor_in_csv(cursor, fields_to_show_order): 
    """ 

    :param cursor: pymongo.Cursor. The list of documents to print into csv. 
    :param fields_to_show_order: List of String. Permits to know the order of columns chosen by the user. 
      Example : BaseStation_ID as first columns, then frequency of utilisation etc.. 
    """ 
    flattened_cursor = [] 
    for a_document in cursor: 
     flattened_cursor.append(_flatten_the_dict(a_document)) 
    string_csv = _get_string_csv_from_list_of_dicts(flattened_cursor, fields_to_show_order) 
    _write_a_file_from_a_string("testCSV"+".csv", string_csv) # PRINT CSV OF A DOC 

我的方法的作品,但大,我想更多地依靠Python庫如大熊貓,openpyxl或CSV。也許他們中的一個可以在平鋪每個字典之後從字典列表中編寫一個csv文件。

感謝你的幫助,

馬蒂亞斯

回答

0

您可以使用mongoexport做到這一點。這是一個將收集流量中的所有數據表單數據庫測試轉儲到csv文件的示例。 (開始3.0版本。蒙戈刪除--csv選項plase使用--type = CSV)

mongoexport --db test --collection traffic --type=csv --out traffic.csv 
的情況下,

你想通過查詢你想轉儲數據萎縮,你可以做到這一點的記錄數。只需添加一個查詢與-q例如:

--query '{"field": 1}' 

如果你只想要一些領域(S)要導出的,你可以添加以下選項(通過CSV你必須提供一個字段列表):

--fields <field1,field2> 

請確保逗號後沒有空格。帶空格的字段仍然以逗號分隔,沒有前導空格或尾部空格,但必須將完整列表放在引號中(文檔有點不清楚)。

如果你想獲得它嵌入你可以解決這個問題通過一個特殊的領域:

--fields "field1,toplevelFieldName.0.field2" 

請注意,有一個「0」爲索引的元素。 monogexport無法將所有元素導出爲csv,因此您需要逐一解決它們,這是不現實的。或者您使用$unwind將數據保存到另一個集合,然後您可以導出。

OR如果你不介意的話,以獲得完整的嵌入式文件,你可以使用:

-- fields "field1,toplevelFieldName" 

toplevelFieldName是嵌入文檔的名稱。

關於mongoexport的完整文檔可以在here找到。

+0

謝謝,這確實容易得多。我有兩個額外的問題: 在嘗試使用mongoexport - 認證機制SCRAM-SHA-1進行認證時,出現錯誤:'2017-01-13T09:25:27.625 + 0100 User Assertion:2:SCRAM-SHA-1機制支持沒有編譯到客戶端庫中。「我有mongoexport 2.6.10。第二個問題:在我的數據庫中,我有一些字典是字典列表,每個字典都有相同的兩個字段x和y。我想導出這些數據,以便在每個文檔的相關單元格的列標題和y值中獲得x值。再次感謝 – Matias

+0

從版本3.0開始,MongoDB不再默認爲MONGODB-CR,而是使用SCRAM-SHA-1作爲默認身份驗證機制。對於舊版本,您可以使用' - 驗證機制MONGODB-CR' – MBushveld

相關問題