2017-01-12 8 views
1

1つのcsv/excelファイルにMongoデータベースのデータをダンプしたいと思います。 私のデータベースには、同じフィールドと埋め込みフィールドを持つ複数のドキュメントがあります。各埋め込みフィールドを私のcsvファイルの1つの列にし、各ドキュメントを1行にします。 がここでの目的である:検索のフィルタ引数で1つの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()のprojection引数を使用して、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 

私のメソッドは動作しますが、大きいと私はそのようなパンダ、openpyxlやCSVなどのpythonライブラリの詳細を頼るしたいと思います。たぶんそれらのうちの1人は、それらの各々を平坦化した後に、辞書のリストからCSVファイルを書くことができる。

マティアス

答えて

0

は、あなたがこれを行うにはmongoexportを使用することができ、あなたの助けをいただき、ありがとうございます。ここでは、コレクショントラフィックのデータベーステストのすべてのデータをcsvファイルにダンプする例を示します。 (バージョン3.0を起動します。--csvオプションplaseを使用取り除かモンゴ--type = CSV)あなたはダンプしたいデータを照会することにより、あなたがこれを行うことができますレコードの数を縮小したい場合は

mongoexport --db test --collection traffic --type=csv --out traffic.csv 

:あなたが唯一のいくつかのフィールド(s)は次のオプションを(CSVとは、フィールドのリストを提供しなければならない)を追加することができ、エクスポートしたい場合には

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

:ちょうど-qなどでクエリを追加

--fields <field1,field2> 

コンマの後に空白がないことを確認してください。空白のフィールドはコンマで区切られますが、先行スペースや後尾スペースはありませんが、完全なリストを引用符で囲む必要があります(ドキュメントは少し不明です)。

あなたはこのことで対応できる埋め込まれる特別なフィールドを取得したい場合:

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

要素のインデックスとして「0」があることに注意してくださいを。 monogexportはすべての要素をcsvの上位にエクスポートすることはできませんので、それらを1つ1つアドレスする必要があります。これは非現実的です。または、$unwindを使用して、データを別のコレクションに保存してからエクスポートできます。あなたが使用することができ、完全な組み込みドキュメントを取得するために気にしない場合は

OR

-- fields "field1,toplevelFieldName" 

toplevelFieldNameを埋め込まれた文書の名前です。

mongoexportに関する完全なドキュメントはhereです。

+0

ありがとう、本当にはるかに簡単です。 mongoexport --authenticationMechanism SCRAM-SHA-1で認証しようとすると、次のエラーが表示されます。 '2017-01-13T09:25:27.625 + 0100ユーザアサーション:2:SCRAM-SHA-1メカニズムのサポートはクライアントライブラリにコンパイルされていません.'私はmongoexport 2.6.10を持っています。 2番目の質問:私のデータベースには辞書のリストであるいくつかのフィールドがあり、各辞書には同じ2つのフィールドxとyがあります。これらのデータをエクスポートして、各ドキュメントの関連するセルの列ヘッダーとy値のx値を取得したいと考えています。ありがとうございました – Matias

+0

バージョン3.0以降、MongoDBはデフォルトでMONGODB-CRにデフォルトではなく、代わりにSCRAM-SHA-1をデフォルトの認証メカニズムとして使用します。古いバージョンでは '--authenticationMechanism MONGODB-CR'を使うことができます – MBushveld

関連する問題