【问题标题】:mongoexport - export in ISO data formatmongoexport - 以 ISO 数据格式导出
【发布时间】:2016-11-27 19:52:23
【问题描述】:

我正在尝试从以 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

【问题讨论】:

  • FWIW,举个例子,你的初始查询以及下面作为答案给出的查询都适用于我使用 MongoDB 3.0.2。并且都将日期输出为字符串{"_id":"abcdef","log":[{"ts":{"$date":"2015-05-14T17:21:51.000Z"},"visitorId":{"$numberLong":"219301285"}},{"ts":{"$date":"2015-05-15T19:20:52.000Z"}}],"uts":{"$date":"2015-05-14T17:21:50.589Z"}} 这个问题是否已本地化到 pre-3.0 版本?

标签: mongodb isodate mongoexport


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

    我解决了以下查询 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

    我找到了解决方案here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-18
      • 2014-02-18
      • 2021-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-24
      相关资源
      最近更新 更多