MongoDb:根据每个文档的计算查询文档

时间:2012-08-23 13:40:49

标签: mongodb

我想查询来自MongoDB数据库的文档,其中条件是给定计算的结果。我不知道这是否可以理解,模拟SQL查询可能会有所帮助:

SELECT * FROM tasks AS t WHERE t.lastRun < (NOW() - t.maxAge)

每个任务都有一个maxAge字段,用于确定任务运行的频率。如果达到maxAge,则查询应返回该任务,然后执行该任务。

因为我缺乏描述这种查询的词汇,所以很难找到关于这个主题的任何内容。如果在某处提到这个,请原谅。 : - )

我的第一反应是:让我们映射整个集合以包含每个任务的计算阈值,但这对于这样一个简单的查询来说似乎有点太多了。我希望这不是&#39;这是唯一的解决方案。 : - )

2 个答案:

答案 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的总和并在插入时存储在附加字段中。因此,生成的查询只需要进行一次比较。