【问题标题】:MongoDB query returning opposite of expected resultsMongoDB 查询返回与预期结果相反的结果
【发布时间】:2011-08-20 13:03:35
【问题描述】:

我正在尝试通过对此集合运行查询来查找过期会话

{
  "_id" : ObjectId("4e4e88b81144e5a658000000"),
  "__meta" : { 
    "id" : "3a72c90f8455e2fd4b8a05ffa04b870a8672f1a9",
    "expiration" : "3600",
    "timestamp" : 1313769656 
  }
}

查询

db.sessions.find({$where: function(){
  return (this.__meta.timestamp + this.__meta.expiration) <= Math.round(new Date().getTime()/1000);
}})

我希望得到该集合,但我得到一个空结果。

【问题讨论】:

  • 我知道发生了什么。过期是一个字符串...修复它的建议?

标签: mongodb


【解决方案1】:

您可以使用 javascript parseInt() 函数将字符串转换为整数。请务必以parseInt(my_string, 10) 的形式使用它,其中第二个参数是整数基数;它的默认行为是自动检测基数,因此像“0400”这样的字符串被解释为八进制,而不是十进制。

【讨论】:

    【解决方案2】:

    最好将expirationtime 存储在数据库中,以便轻松(且高效)地查找过期记录。

    【讨论】:

    • 我想我的想法是我可以将时间戳用于多种用途,而不仅仅是用于到期,但您提出了一个很好的观点。 :) 谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多