2017-02-09 62 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.0.firstname),你会得到contactpersons中的第一个文档。 mongoexport无法导出数组中的多个或全部元素,因此您需要做的是将数组展开并将其保存到另一个集合中。你可以用aggregation framework来做到这一点。

首先,不要contactpersons的$unwind,那么你要使用(在你的榜样,countrycontactpersons),最后输出保存到一个新的集合与$out$project领域。现在

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

你可以做一个contacts mongoexport(这是contactpersons$unwind的结果)和country

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代码来做到这一点;最后你不得不放松阵列。 –