我想查询来自MongoDB数据库的文档,其中条件是给定计算的结果。我不知道这是否可以理解,模拟SQL查询可能会有所帮助:
SELECT * FROM tasks AS t WHERE t.lastRun < (NOW() - t.maxAge)
每个任务都有一个maxAge字段,用于确定任务运行的频率。如果达到maxAge,则查询应返回该任务,然后执行该任务。
因为我缺乏描述这种查询的词汇,所以很难找到关于这个主题的任何内容。如果在某处提到这个,请原谅。 : - )
我的第一反应是:让我们映射整个集合以包含每个任务的计算阈值,但这对于这样一个简单的查询来说似乎有点太多了。我希望这不是&#39;这是唯一的解决方案。 : - )
答案 0 :(得分:2)
你可以尝试
db.tasks.insert({lastRun:new ISODate(), maxAge:100});
db.tasks.find({ $where: "this.maxAge < (new ISODate()-this.lastRun)"});
答案 1 :(得分:1)
使用$ where的问题在于它无法编入索引,并且目前在服务器上运行javascript查询存在问题,因为javascript引擎是单线程的。
在这种情况下,更好的方法是
重写:t.lastRun&lt; (现在() - t.maxAge) 至:(t.lastRun + t.maxAge)&lt; NOW()
将计算t.lastRun和t.maxAge的总和并在插入时存储在附加字段中。因此,生成的查询只需要进行一次比较。