2017-02-09 11 views
1

にマイドキュメント埋め込まれた文書のフィールドをエクスポートする方法:MongoDBの

db.org.insert({ 
    "id" : 28, 
    "organisation" : "Mickey Mouse company", 
    "country" : "US", 
    "contactpersons" : [{ 
     "title" : "", 
     "typecontact" : "D", 
     "mobilenumber" : "757784854", 
     "firstname" : "Mickey", 
     "lastname" : "Mouse", 
     "emailaddress" : "[email protected]" 
    }, 
    { 
     "title" : "", 
     "typecontact" : "E", 
     "mobilenumber" : "757784854", 
     "firstname" : "Donald", 
     "lastname" : "Duck", 
     "emailaddress" : "[email protected]" 
    }], 
    "modifieddate" : "2013-11-21T16:04:49+0100" 
}); 

マイクエリ:このクエリによって

mongoexport --host localhost --db sample --collection org --type csv --fields country,contactpersons.0.firstname,contactpersons.0.emailaddress --out D:\info_docs\org.csv 

を、私は唯一の最初の文書の値を取得することができますよcontactpersons.But、私はまた、2番目のドキュメント値をエクスポートしようとしています。

この問題を解決するにはどうすればよいですか?誰でもこのことについてお手伝いしてください...

答えて

0

contactpersonsの最初の文書は、配列の最初の要素(contactpersons.0.firstname)のみをエクスポートしているためです。 mongoexportは配列のいくつかまたはすべての要素を書き出すことができないので、配列を巻き戻して別のコレクションに保存する必要があります。これはaggregation frameworkで行うことができます。フィールドは、あなたが(あなたの例では、countrycontactpersons)を使用し、最後に$outで新しいコレクションで出力を保存したい$project

まず、その後、contactpersonsの$unwindを行います。

db.org.aggregate([ 
    {$unwind: '$contactpersons'}, 
    {$project: {_id: 0, org_id: '$id', contacts: '$contactpersons', country: 1}}, 
    {$out: 'aggregate_org'} 
]) 

今、あなたはとcountrycontactpersons$unwindの結果である)contactsのmongoexportを行うことができます。

mongoexport --host localhost --db sample --collection aggregate_org --type=csv --fields country,contacts.firstname,contacts.emailaddress --out D:\info_docs\org.csv 
+0

ご返信ありがとうございます。しかし、それはダミーのコレクション権利を使用しています。その代わりに、埋め込みドキュメントを反復処理するためのjavascriptコードを書いて、mongoexportコマンドで同じ.jsファイルを使用することができます。 – dev777

+0

この場合、新しいダミーコレクションを使用して巻き戻しの結果を保存しています。私はあなたがどのようにjavascriptコードでそれを行うことができるか分からない。とにかく配列を巻き戻す必要があります。 –