2012-05-24 81 views
3

我想通過自己的領域,具體時間,即過濾MongoDB的文件:過濾MongoDB中與自己的領域

{time1: timeval1, time2: timeval2} 

我希望能夠得到一個結果集(像.find ())其中timeval1大於timeval2。

我不知道如何用$ gt做到這一點,並找不到類似的東西。任何想法如何做到這一點?

我在djangi項目中從pymongo訪問它......但我想要的只是mongodb查詢。

回答

3

您可以使用$where運算符和一個javascript表達式來編寫您的查詢邏輯。

http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-JavascriptExpressionsand%7B%7B%24where%7D%7D

> db.newColl.find() 

{ "_id" : ObjectId("4fbdcdd6e79d66d9e681b185"), "time1" : 123, "time2" : 22 } 
{ "_id" : ObjectId("4fbdcddee79d66d9e681b186"), "time1" : 11, "time2" : 220 } 
{ "_id" : ObjectId("4fbdcde6e79d66d9e681b187"), "time1" : 331, "time2" : 2120 } 
{ "_id" : ObjectId("4fbdcdece79d66d9e681b188"), "time1" : 1, "time2" : 20 } 

> db.newColl.find({'$where' : 'this.time1 > this.time2' }); 

{ "_id" : ObjectId("4fbdcdd6e79d66d9e681b185"), "time1" : 123, "time2" : 22 } 


> db.newColl.find({'$where' : 'this.time1 < this.time2' }); 

{ "_id" : ObjectId("4fbdcddee79d66d9e681b186"), "time1" : 11, "time2" : 220 } 
{ "_id" : ObjectId("4fbdcde6e79d66d9e681b187"), "time1" : 331, "time2" : 2120 } 
{ "_id" : ObjectId("4fbdcdece79d66d9e681b188"), "time1" : 1, "time2" : 20 } 

+2

當使用$哪裏,這是好事,要知道,它的性能比 「正常」 的查詢更糟。從mongodb手冊:「只有在必須顯着較慢時才使用$。」相關的建議是儘量使用普通查詢表達式過濾結果集,儘可能在$ where之前爲了減少由$ where處理的文檔數量。 – jhonkola