【问题标题】:MongoDB greater than numberLong issueMongoDB 大于 numberLong 问题
【发布时间】:2019-02-02 13:41:59
【问题描述】:

我正在尝试获取集合中的所有文档,其中日期存储如下:

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

...大于这个:1546300800000

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

这是我的查询:

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

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

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

【问题讨论】:

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


    【解决方案1】:

    您的日期保存为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) }
    })
    

    【讨论】:

    • 似乎无法使这些工作...是否可以在 find() 查询中将其转换为 int?
    猜你喜欢
    • 2017-07-22
    • 2014-03-19
    • 2016-04-13
    • 2017-07-22
    • 2014-08-16
    • 2016-01-29
    • 2019-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多