MongoDB导出为CSV

时间:2013-05-03 05:11:05

标签: mongodb

我遇到了小问题,我不确切地知道我错在哪里。>。<,我想将所有数据导出到CSV文件,似乎我无法导出,可能是语法错误:(

这是我的mongo数据

"wfm_voteLog" : 
    { 
        "wfm_test@abc_com" : 
            { 
                "className" : "com.abc.com.shared.activiti.ProcessApproval", 
                "approver" : "wfm.test@abc.com", 
                "approvalTime" : ISODate("2012-08-16T08:59:43.297Z"), 
                approvalState" : "APPROVED" 
            } 
    } 

这是我的导出查询

$ mongoexport.exe --db wfm --collection AuditTrail --csv -fields
  variables.wfm_voteLog.className

我认为问题来自"wfm_test@abc_com",但我不知道如何绕过这个字段。

2 个答案:

答案 0 :(得分:1)

可悲的是,你不能用 mongoExport 来做到这一点。

mongoexport.exe --db wfm --collection AuditTrail --csv -fields variables.wfm_voteLog.0.className

这将输出AuditTrail集合的所有行,并且对于每行/文档,它将只放置第一个 * wfm_voteLog *的className。< / p>

这里的问题是mongoexport不会从Document中提取数组。它只会为每个文档导出一个值

你只能做一些丑陋的事情:

mongoexport.exe --db wfm --collection AuditTrail --csv -fields 'variables.wfm_voteLog.0.className,variables.wfm_voteLog.1.className,variables.wfm_voteLog.2.className,...'

答案 1 :(得分:1)

我看到三个问题:

  1. 使用您的示例文档导出命令字段选项不正确,它应如下所示:

    mongoexport --db wfm --collection AuditTrail --csv --fields "wfm_voteLog.wfm_test@abc_com.className"
    
  2. mongoexport解析字段名称时出现错误。它使用的正则表达式与mongo的正确字段名称概念不匹配。具体来说,它使用的\w不包含@字符。如果您使用Madarco建议的--fieldFile选项,则可以避免此错误。

    echo wfm_voteLog.wfm_test@abc_com.className > ff;
    mongoexport --db wfm --collection AuditTrail --csv --fieldFile ff
    
  3. 最后,wfm_test@abc_com看起来像数据值,而不是像emailAddress这样的数据模型名称。我在这里假设,不同的文档在这里会有不同的值,具体取决于用户的电子邮件。虽然有效的mongo字段名称,但这会使查询和导出变得困难,因为字段名称没有外卡。也就是说,您无法使用wfm_voteLog.*.className。您可以考虑重构数据模型。