MongoDB - mongoexport嵌套数组中的所有对象

时间:2014-10-15 09:14:47

标签: mongodb csv mongoexport

我正在使用MongoDB版本2.6.x。我需要从特定的集合中导出文档。

mongoexport是满足需求的工具。但是,我不知道如何导出嵌套数组下的所有对象。以下是我的样本文件。

{
  "_id": 1,
  "field_1": "value1",
  "field_2": "value2",
  "field_array": [
    {"sub_field_1": "sub_val_1", "sub_field_2": "sub_val_2"},
    {"sub_field_1": "sub_val_1", "sub_field_2": "sub_val_2"},
    {"sub_field_1": "sub_val_1", "sub_field_2": "sub_val_2"}  
  ] 
}

以下是mongoexport命令

mongoexport -d db_name -c collection_name -q '{"field_array.sub_field_1": {$gte: "some_value_1", $lt: "some_value_2"}}' -fieldFile fields.txt --csv > data_report.csv

其中,fields.txt低于内容

field_array.sub_field_1
field_array.sub_field_2

我在csv中得到如下数据,即空字段。

field_array.sub_field_1,field_array.sub_field_2
,

但是,如果我在fields.txt中指定索引值,如下所示

field_array.0.sub_field_1
field_array.0.sub_field_2

然后,我得到以下数据

field_array.sub_field_1,field_array.sub_field_2
sub_val_1,sub_val_1

,即只返回field_array中的一个对象,但不是全部。 但是,我需要的是如下

field_array.sub_field_1,field_array.sub_field_2
sub_val_1,sub_val_1
sub_val_2,sub_val_2

,即field_array中的所有对象。

任何帮助?

2 个答案:

答案 0 :(得分:12)

MongoExport

要导出其值为object数组的属性,然后展开数组以生成单个文档并存储在新集合中,然后导出该集合。

For Instance

数据库:abc 集合:xyz

db.xyz.aggregate([
   {$unwind: "$field_array"},
   {$project: { _id:0,field_id:"$_id",Innerfield: "$field_array", "field_1": 1,"field_2":1}},
   {$out: "aggregate_xyz"}
])

MongoExport语法

mongoexport --host <hostname> --db <Database Name> --collection <collection Name> --csv --fields fieldname1,fieldname2 --out fileName.csv

示例:以CSV格式导出

mongoexport --host localhost --db abc --collection aggregate_xyz --csv --fields field_id,field_1,field_2,Innerfield.sub_field_1,Innerfield.sub_field_2 --out important.csv

示例:以JSON格式导出

mongoexport --host localhost --db abc --collection aggregate_xyz --fields field_id,field_1,field_2,Innerfield.sub_field_1,Innerfield.sub_field_2 --out important.json

了解更多信息,请访问

<强> $退绕

https://docs.mongodb.org/v3.0/reference/operator/aggregation/unwind/

<强> $退出

https://docs.mongodb.org/v3.0/reference/operator/aggregation/out/

$项目

https://docs.mongodb.org/v3.0/reference/operator/aggregation/project/

答案 1 :(得分:2)

似乎 mongoexport 无法导出数组的所有元素,除非您逐个指定所有元素。当然这是不现实的 因此,您可以拆分数组并将数据保存到临时集合中,然后从此新集合中导出。

db.collection_name.aggregate([ {
    $match : {
        "field_array.sub_field_1" : {
            $gte : "some_value_1",
            $lt : "some_value_2"
        }
    }
}, {
    $project : {
        _id : 0,
        field_array : 1
    }
}, {
    $unwind : "$field_array"
}, {
    $out : "forcsv"
} ]);

mongoexport -d db_name -c forcsv --fieldFile fields.txt --csv > data_report.csv