mongoexport csv输出最后的数组值

时间:2014-11-19 12:37:14

标签: arrays mongodb csv export

受服务器故障中此问题的启发 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

是否有正确的符号?或者,如果它根本不可能?

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投影的查询。