MongoDB 大于 numberLong 问题

Man*_*nsa 5 string date mongodb mongodb-query aggregation-framework

我试图获取一个集合中的所有文档,其中的日期存储为:

{
  "_id": {
    "$oid": "5c500ff8df157e051961cfab"
  },
  "date": {
    "$date": {
      "$numberLong": "1548750839931"
    }
  },
  "when": "2019-1-29T8:33Z",
  "score": 20
}
Run Code Online (Sandbox Code Playgroud)

...大于此:1546300800000

我的收藏中有 2 条记录,但我没有得到任何回报?

这是我的查询:

{"date":{"$gt": 1546300800000}}
Run Code Online (Sandbox Code Playgroud)

我想这与将日期存储为字符串有关,但可以做到吗?

希望得到帮助,并在此先感谢:-)

Ash*_*shh 6

您的日期被保存为Date类型,您正在使用时间戳来查找文档。

因此,您可以先date使用$toLong聚合运算符转换为时间戳,然后使用$gt运算符

如果您使用的是 mongodb 4.0

db.collection.find({
  "$expr": {
    "$gt": [{ "$toLong": "$date" }, 1546300800000]
  }
})
Run Code Online (Sandbox Code Playgroud)

如果您使用的是 mongodb 3.6

db.collection.find({
  "$expr": {
    "$gt": [
      { "$subtract": ["$date", new Date("1970-01-01")] },
      1546300800000
    ]
  }
})
Run Code Online (Sandbox Code Playgroud)

或者您可以简单地将您timestamp的类型转换为date

db.collection.find({
  "date": { "$gt": new Date(1546300800000) }
})
Run Code Online (Sandbox Code Playgroud)