2012-08-23 75 views
3

查詢文件我想從MongoDB數據庫中條件給定的計算結果查詢文件。我不知道這是可以理解的,模擬的SQL查詢可能有幫助:的MongoDB:根據計算每個文檔

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

每個任務都有其確定的任務應該多久運行MAXAGE場。如果達到MAXAGE,查詢應返回的任務,然後執行。

因爲我缺乏描述這種查詢的詞彙,所以很難找到關於此主題的任何內容。如果在某處提到這個,請原諒。 :-)

我的第一反射是:讓我們映射整個集合以包含每個任務的計算閾值,但對於這樣一個簡單的查詢來說這似乎有點太多了。我希望這個ISN」 T是唯一的解決了這個。 :-)

回答

1

的問題,使用$哪裏是它不能被索引並有與當前運行的JavaScript查詢服務器上的問題,因爲JavaScript引擎單線程。

在這種情況下,更好的方法是

重新寫:t.lastRun <(NOW() - t.maxAge) 於:(t.lastRun + t.maxAge)< NOW()

t.lastRun和t.maxAge的總和將在插入時計算並存儲在附加字段中。因此,生成的查詢只需要一個比較。

+1

只需添加到Matt所說的修改模式以擁有單個計算字段將不僅允許使用簡單查詢來回答查詢,還可以對此計算字段進行索引以加快比較。 –

2

你可以嘗試

db.tasks.insert({lastRun:new ISODate(), maxAge:100}); 

db.tasks.find({ $where: "this.maxAge < (new ISODate()-this.lastRun)"}); 
相關問題