2

我正在尝试从日期以 ISO 格式存储的 Mongodb 导出数据。例如 -

    {
    "_id" : "abcdef",
    "log" : [
        {
            "ts" : ISODate("2015-05-14T17:21:51Z"),
            "visitorId" : NumberLong(219301285)
        },
        {
            "ts" : ISODate("2015-05-15T19:20:52Z")
        }
    ],
    "uts" : ISODate("2015-05-14T17:21:50.589Z")
}

当我将导出命令编写为

mongoexport --host localhost:27018 --db mydb --collection mycoll --query '{"log.ts":{$gte :new Date(1431619200000)}}'
--out test_1.json

它以 JSON 格式给我结果,但日期格式是数字

    {
    "_id": "abcdef",
    "log": [
        {
            "ts": {
                "$date": 1431624111000
            },
            "visitorId": 219301285
        },
        {
            "ts": {
                "$date": 1431667764000
            },
            "visitorId": 0
        }
    ],
    "uts": {
        "$date": 1431624110589
    }
}

我想要的是日期应该是 ISO 格式而不是数字。

我怎样才能做到这一点?

我尝试使用以下格式,但它不起作用并给出错误

mongoexport --host localhost:27018 --db mydb --collection mycoll --query "{'log.ts':{'$gte' :{'$date':'2015-05-15 10:00:00.000Z'}}}" --out test_1.json
4

2 回答 2

2

mongoexport生成严格模式 JSON作为其输出。使用该格式,日期表示为,{ "$date": "<date>" }<date>MongoDB 版本之间的表示并不相同:

  • MongoDB 2.6开始(引用文档):
    <date>是一种 ISO-8601 日期格式,模板后面有一个强制时区字段YYYY-MM-DDTHH:mm:ss.mmm<+/-Offset>。”
  • MongoDB 2.4之前,日期表示为“自 UTC 纪元以来的毫秒数的 64 位有符号整数(版本 1.9.1 之前无符号)。”

如果您想要直接从mongoexport您那里获得“新”ISO 日期表示,则至少必须更新到 MongoDB 2.6。否则,您将拥有:

  • 使用您喜欢的脚本语言对数据进行后处理
  • 修补(反向移植?)从 2.6 到 2.4 的更改

它们都不是长期解决方案,就我自己而言,我会强烈推动更新 MongoDB(最高 >=3.0)。但正如您所理解的,这可能会导致一些兼容性问题。所以YMMV。

于 2015-05-15T08:22:41.347 回答
0

我用以下查询 mongo 2.6.12 解决了:

mongoexport --username blabla --password --db bmv4 --collection 约会 --query '{created: {$gte: new Date(1472680800000)}},$or:[{action:"CREA"},{action: "CREV"},{action:"MOVE"},{action:"DELETE"},{action:"FREE"}]}' --out bmv4Appointments.json

我在这里找到了解决方案

于 2016-11-27T11:52:23.880 回答