MongoDB大于numberLong问题

时间:2019-02-02 13:41:59

标签: string mongodb date mongodb-query aggregation-framework

我正在尝试将所有文​​档收集到其中的日期存储如下:

{
  "_id": {
    "$oid": "5c500ff8df157e051961cfab"
  },
  "date": {
    "$date": {
      "$numberLong": "1548750839931"
    }
  },
  "when": "2019-1-29T8:33Z",
  "score": 20
}

...大于此:1546300800000

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

这是我的查询:

{"date":{"$gt": 1546300800000}}

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

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

1 个答案:

答案 0 :(得分:3)

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

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

如果您使用的是mongodb 4.0

db.collection.find({
  "$expr": {
    "$gt": [{ "$toLong": "$date" }, 1546300800000]
  }
})

如果您使用的是mongodb 3.6

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

或者您可以简单地将timestamp转换为键入date

db.collection.find({
  "date": { "$gt": new Date(1546300800000) }
})