我正在尝试将MongoDB中的嵌套字段导出为CSV。
从下面的代码中,我想提取比例名称(例如“安全”和“电源”)和 raw_score (例如2& 3)分别)字段。这四个字段将存储在CSV中的四列中,其中每列都是一个提取字段。
"results" : {
"scales" : [
{
"scale" : {
"name" : "Security",
"code" : "SEC",
"multiplier" : 1
},
"raw_score" : 2
},
{
"scale" : {
"name" : "Power",
"code" : "POW",
"multiplier" : -1
},
"raw_score" : 3
}
],
在过去,我成功地使用点符号来提取嵌套字段(以下提取的下面的工作示例),但我不确定如何提取共享相同名称的字段。
mongoexport -d production_hoganx_collector_061817 -c records --type=csv -o col_liwc_summary_061817.csv -f user_id,post_analysis.liwc_scores.tone
如何使用mongoexport命令提取名称和 raw_score 字段?我试图将数据库导出到JSON文件,然后通过R提取数据,但是这个方法需要很长时间才能完成。
如果mongoexport不适合,我愿意听取替代方案!
非常感谢,
答案 0 :(得分:1)
我假设这是一次性的事情,所以我建议使用聚合来构建一个新的集合,其中scales
数组是unwinded。
展开扇出n个文档中的文档,其中n是展开指定的数组类型字段中的元素数量。例如,如果您有这样的文档:
{
name: "Some name",
email: ["somename@somedomain.com", "name@someotherdomain.com"]
}
在email
字段上展开会产生两个文档:
{
name: "Some name",
email: "somename@somedomain.com"
},
{
name: "Some name",
email: "name@someotherdomain.com"
}
因此,在您的情况下,我认为您应该使用它来解开您的比例字段,如下所示:
db.collection.aggregate([
{$match: yourCondition},
{$unwind: "$scales"},
{$project: {
_id: false,
scales: true,
... other fields ...
}},
{$out: "unwindedcollection"}
]);
此时,您应该能够使用之前使用的点符号从生成的新集合(unwindedcollection)中使用mongoexport。
请务必在_id
上设置为false,否则您最终会出现重复的_id
错误。您不想投影该字段,因此在插入新集合时会创建新的ID,并且会转储您的汇总结果。
我将链接留给我用于此的概念的文档:
汇总:https://docs.mongodb.com/manual/reference/method/db.collection.aggregate/
$ project:https://docs.mongodb.com/manual/reference/operator/aggregation/project/
$ unwind:https://docs.mongodb.com/manual/reference/operator/aggregation/unwind/
$ out:https://docs.mongodb.com/manual/reference/operator/aggregation/out/