【问题标题】:Dates and MongoDB - FAIL日期和 MongoDB - 失败
【发布时间】:2017-06-07 13:48:09
【问题描述】:

我找到了大量关于在 mongodb 中处理日期的文档。不幸的是,它似乎都没有按预期工作。这是我的问题...我正在尝试按日期查询。这就是我使用 find() 搜索时文档的样子:

{
    "_id": ObjectId("5935ff97d1d72d2134d7ad8f"),
    "username": "Test",
    "email": "test@test",
    "password": "sha1$8dbb9bdc$1$b0096596e0e3aba3ad883489bc713b0462ad6472",
    "access": "test",
    "cookies": [{
            "hash": "ZOddh981SZ7uiw3XPQYwJzET18byscWo3BV0RzIc8Eo8QY2VdlVm23qs28AAvxPx",
            "exipires": ISODate("2017-06-12T01:34:45.895Z")
        }, {
            "hash": "gk8voLrc2JtX832GExcWlSoVdjkiEoFAvLQAayevtPJGJ7tCchYAP0it93aAMBlb",
            "exipires": "ISODate(\"2017-06-11 20:37:10.167\")"
        }
    ]   
}

(如您所见,我有 2 个 cookie。一个在日期前后带有转义引号,一个没有。)

以下是我目前尝试过的搜索:

db.getCollection("auth").find({ 'cookies.expires': {'$gte': {$date: "2017-06-07T01:37:14.362Z"} } })
db.getCollection("auth").find({ 'cookies.expires': {'$lte': {$date: "2017-06-07T01:37:14.362Z"} } })
db.getCollection("auth").find('cookies.expires': { '$gte': new ISODate("2017-06-07T01:37:14.362Z") } })
db.getCollection("auth").find('cookies.expires': { '$lte': new ISODate("2017-06-07T01:37:14.362Z") } })
db.getCollection("auth").find('cookies.expires': { '$gte': new ISODate() } })
db.getCollection("auth").find('cookies.expires': { '$gte': new Date("2017-06-07T01:37:14.362Z") } })
db.getCollection("auth").find('cookies.expires': { '$lte': new Date("2017-06-07T01:37:14.362Z") } })
db.getCollection("auth").find('cookies.expires': { '$gte': new Date("2017-06-07T01:37:14.362Z") } })

我非常肯定搜索应该针对 $gte,因为我想查找未来的所有日期。但是我已经尝试了两种方法,以防万一它与我的预期相反。

这些都不起作用,我不知道为什么 - 现在已经在这里呆了 2 个小时。一个新的眼睛将不胜感激。

【问题讨论】:

  • 这只是一个错字吗? expiresexipires。这应该工作db.getCollection("auth").find({'cookies.expires': { '$gte': ISODate("2017-06-07T01:37:14.362Z") } })
  • 哦。我的。上帝。就是这样。我不敢相信我在一个错字上浪费了这么多时间。谢谢谢谢!!
  • "ISODate(\"2017-06-11 20:37:10.167\")" 也是一个字符串,而不是 Date 对象

标签: node.js mongodb date search isodate


【解决方案1】:
db.getCollection("auth").find({
      'cookies.expires': { '$gte': ISODate("2017-06-07T01:37:14.362Z") } 
})

【讨论】:

  • 虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高​​答案的长期价值。
  • 最后只是一个错字。我使用的所有 $gt 搜索都运行良好......一旦我修复了文档中的错字。我会将其标记为答案,以免无人回答。
猜你喜欢
  • 2016-02-26
  • 1970-01-01
  • 2015-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多