mongoexport - 以ISO数据格式导出

时间:2015-05-15 06:56:12

标签: mongodb isodate mongoexport

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

    {
    "_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

3 个答案:

答案 0 :(得分:2)

mongoexport生成strict mode JSON作为输出。使用该格式,日期表示为{ "$date": "<date>" },但<date>的表示在MongoDB版本中不均匀:

  • MongoDB 2.6开始(引用文档):<date>是一种ISO-8601日期格式,在模板{{1}后面有一个强制性时区字段}“。
  • 最多MongoDB 2.4,日期表示为“自纪元UTC以来毫秒级的64位有符号整数(版本1.9.1之前未签名)。”

如果您想直接从YYYY-MM-DDTHH:mm:ss.mmm<+/-Offset>获得“新”ISO日期表示,则必须至少更新到MongoDB 2.6。否则你会有:

  • 使用您喜欢的脚本语言对数据进行后期处理
  • 修补(backport?)从2.6更改为2.4

它们都不是长期解决方案,因为我自己会强烈推动更新MongoDB(最多为&gt; = 3.0)。但正如您所理解的那样,这可能会导致一些兼容性问题。所以YMMV。

答案 1 :(得分:0)

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

  

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

我找到了解决方案here

答案 2 :(得分:-1)

ISODate是此处使用的格式。

mongoexport --host localhost:27018 --db mydb --collection mycoll --query
'{"log.ts":{$gte: ISODate("2015-01-20T15:00:00Z")}}' --out test_1.json

这是未经测试的代码,但类似的内容对我有用。