Mongodb(或mongoose)获取当前日期小于其自身间隔的文档

时间:2015-02-04 23:33:25

标签: node.js mongodb mongoose

文档结构(与此问题无关的字段已删除):

{
    _id: ObjectId,
    lastDate: Date,
    interval: Integer, // in seconds
    mode: String
}

我正在寻找的是类似于以下的查询:

{
    lastDate: {
        $lt: new Date() - $interval
    },
    mode: {
        $in: ['collect', 'debug']
    }
}

因此,查询将获得lastDate的所有文档小于当前日期/时间减去其自己的间隔。也只能获取模式设置为collect或debug的文档。

这可以通过基本查询完成,还是需要使用aggregate或mapReduce?

2 个答案:

答案 0 :(得分:1)

数学上,你的情况是

lastDate < current_time - interval

相当于

lastDate + interval < current_time

因此,代替(或除了)存储lastDateinterval,存储它们的总和。总和可以存储为纪元以来的秒数或日期 - 您可以在客户端代码中选择最方便的内容。

答案 1 :(得分:0)

我找到了一个解决方案,但我不确定它是否是表现最佳的解决方案。

有效的查询:

{
    $where: "this.lastDate < new Date() - this.interval",
    mode: {
        $in: ['collect', 'debug']
    }
}

使用the $where operation

  

使用$where运算符将包含JavaScript表达式或完整JavaScript函数的字符串传递给查询系统。 $where提供了更大的灵活性,但要求数据库处理集合中每个文档的JavaScript表达式或函数。使用thisobj

在JavaScript表达式或函数中引用该文档