【问题标题】:Query to find all documents with non-zero milliseconds查询以查找所有非零毫秒的文档
【发布时间】:2019-01-12 16:16:35
【问题描述】:

有大量 transaction 文档 (~2M)

每个transaction 文档都有一个source.billDate 字段:

"source.billDate" : ISODate("2018-07-23T16:02:06.797Z")
// or //
"source.billDate" : ISODate("2018-07-22T14:21:56.000Z")

如您所见,有些日期有毫秒,有些则没有。

我想知道是否有一种方法可以使用 MongoDB 查询来查找 transaction 在其 billDate 日期中有毫秒的文档。

有没有可能,如果有,怎么做?

【问题讨论】:

  • 它们都有毫秒,但如果毫秒为零则为一
  • @BasilBattikhi 好吧,是的,没有毫秒的 ISODate 是不可能的。
  • @BasilBattikhi 问题是我们的正确格式是没有毫秒,但是有一个错误增加了毫秒,这反过来又导致了很多问题。所以我试图找到一种有效的方法将毫秒设置为 0
  • 所以你只想要第一个带有毫秒"797"的文档吗?
  • @AnthonyWinzlet 否,所有个毫秒值不为 0 的文档。

标签: mongodb mongoose mongodb-query aggregation-framework


【解决方案1】:

您可以在 mongodb 3.6 版本中尝试以下查询

您必须首先使用$dateToPartsdate 中提取毫秒,然后您可以轻松地匹配具有毫秒$ne 0 的文档

db.collection.aggregate([
  { "$match": {
    "$expr": {
      "$ne": [
        { "$millisecond": {
          "date": "$source.billDate",
          "timezone": "America/New_York"
        }},
        0
      ]
    }
  }}
])

或者也可以使用查找查询

db.collection.find({
  "$expr": {
    "$ne": [
      { "$millisecond": {
        "date": "$source.billDate",
        "timezone": "America/New_York"
      }},
      0
    ]
  }
})

【讨论】:

  • 这是一个完美的解决方案。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
  • 2017-02-28
  • 1970-01-01
  • 1970-01-01
  • 2016-05-14
相关资源
最近更新 更多