Aya*_*sha 3 csv mongodb 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"}
]
}
Run Code Online (Sandbox Code Playgroud)
以下是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
Run Code Online (Sandbox Code Playgroud)
在哪里,fields.txt
低于内容
field_array.sub_field_1
field_array.sub_field_2
Run Code Online (Sandbox Code Playgroud)
我在csv即空字段中获得如下数据.
field_array.sub_field_1,field_array.sub_field_2
,
Run Code Online (Sandbox Code Playgroud)
但是,如果我在fields.txt
下面指定索引值
field_array.0.sub_field_1
field_array.0.sub_field_2
Run Code Online (Sandbox Code Playgroud)
然后,我得到以下数据
field_array.sub_field_1,field_array.sub_field_2
sub_val_1,sub_val_1
Run Code Online (Sandbox Code Playgroud)
即,只返回field_array中的一个对象,但不是全部.但是,我需要的是如下
field_array.sub_field_1,field_array.sub_field_2
sub_val_1,sub_val_1
sub_val_2,sub_val_2
Run Code Online (Sandbox Code Playgroud)
即,field_array中的所有对象.
有帮助吗?
pra*_*wda 13
MongoExport
要导出其值为object数组的属性,然后展开数组以生成单个文档并存储在新集合中,然后导出该集合.
例如
数据库:abc collection: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"}
])
Run Code Online (Sandbox Code Playgroud)
MongoExport语法
mongoexport --host <hostname> --db <Database Name> --collection <collection Name> --csv --fields fieldname1,fieldname2 --out fileName.csv
Run Code Online (Sandbox Code Playgroud)
示例:以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
Run Code Online (Sandbox Code Playgroud)
示例:以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
Run Code Online (Sandbox Code Playgroud)
要了解更多信息,请访问
$开卷
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/
看来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
Run Code Online (Sandbox Code Playgroud)