2017-02-09 4 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 

, 나는의 첫 번째 문서 값을 얻을 수 있어요 그래도 두 번째 문서 값을 내보내려고합니다.

이 문제를 어떻게 해결할 수 있습니까? 누구든지이 문제에 관해 나를 도와주세요.

답변

0

contactpersons의 첫 번째 문서는 배열의 첫 번째 요소 (contactpersons.0.firstname) 만 내보내므로 정확하게 첫 번째 문서가 나타납니다. mongoexport은 배열의 여러 요소 나 모든 요소를 ​​내보낼 수 없으므로 배열을 풀고 다른 컬렉션에 저장해야합니다. aggregation framework으로이 작업을 수행 할 수 있습니다.

먼저, 다음 $project 필드 당신이 (당신의 예를 들어, countrycontactpersons에서)를 사용하고, 마지막 $out으로 새 컬렉션에 출력을 저장 contactpersons의 $unwind 싶지 않습니다.

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

이제와 country합니다 (contactpersons$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

답장을 보내 주셔서 감사합니다. 그러나 더미 컬렉션을 사용하고 있습니다. 그 대신 우리는 자바 스크립트 코드를 작성하여 임베디드 문서를 반복하고 mongoexport 명령에서 동일한 .js 파일을 사용할 수 있습니다. – dev777

+0

그렇다면 새로운 더미 콜렉션을 사용하여 unwind 결과를 저장하고 있습니다. 나는 당신이 자바 스크립트 코드로 어떻게 할 수 있을지 모르겠다. 결국 배열을 풀어야 할 것입니다. –