受服务器故障中此问题的启发 https://serverfault.com/questions/459042/mongoexport-csv-output-array-values
我使用mongoexport将一些集合导出为CSV文件,但是当我尝试定位数组 last 成员的字段时,我无法正确导出它。
命令我使用
mongoexport -d db -c collection -fieldFile fields.txt --csv > out.csv
我的收藏品之一:
{
"id": 1,
"name": "example",
"date": [
{"date": ""},
{"date": ""},
],
"status": [
"true",
"false",
],
}
我可以访问我的数组的第一个成员,编写如下字段
name
id
date.0.date
status.0
有没有办法在不知道数组长度的情况下访问数组的 last 项?
因为以下内容无效:
name
id
date.-1.date
status.-1
是否有正确的符号?或者,如果它根本不可能?
答案 0 :(得分:1)
在不知道数组长度的情况下,无法引用数组的最后一个元素,因为符号为array_field.index
,其中索引为[0,length - 1]。您可以使用聚合框架来创建要导出的数据的视图,将其临时保存到带有$ out的集合中,然后将其保存到mongoexport中。例如,您可以为您的文档执行
db.collection.aggregate([
{ "$unwind" : "$date" },
{ "$group" : { "_id" : "$_id", "date" : { "$last" : "$date" } } },
{ "$out" : "temp-for-csv" }
])
为了获得每个文档的最后日期并将其输出到集合temp-for-csv。
您可以使用$slice
投影运算符返回数组中的最后一个元素,但这在聚合中不可用,而mongoexport只采用查询规范,而不是投影规范,因为{{ 1}}和--fields
选项应该足够了。可能是一个很好的功能请求,要求使用带有mongoexport投影的查询。