有大量transaction文档(约200万个)
每个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文档。
如果有,怎么可能?

最佳答案

您可以在MongoDB 3.6版本中尝试以下查询
您必须先使用date$dateToParts中提取毫秒,然后才能轻松地与毫秒$ne0的文档匹配

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

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

09-18 11:49