【问题标题】:mongoexport csv output last array valuesmongoexport csv 输出最后一个数组值
【发布时间】:2014-11-20 02:28:07
【问题描述】:

受服务器故障中这个问题的启发 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",
    ],
}

我可以访问我的数组的 first 成员,编写如下字段

name
id
date.0.date
status.0

有没有办法在不知道数组长度的情况下访问我的数组的最后一个项?

因为以下不起作用:

name
id
date.-1.date
status.-1

知道正确的符号吗?或者如果这根本不可能?

【问题讨论】:

    标签: arrays mongodb csv export


    【解决方案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 只接受查询规范,而不是投影规范,因为 --fields 和 @987654326 @ 选项应该就足够了。请求使用带有 mongoexport 投影的查询可能是一个很好的功能请求。

    【讨论】:

    • 感谢您的回答,是的,这可能是一个很好的请求,因为我想避免编写脚本更多使用字段本身应该有用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-10
    • 2020-12-22
    • 1970-01-01
    • 1970-01-01
    • 2016-08-08
    • 2019-10-25
    • 1970-01-01
    相关资源
    最近更新 更多