2012-05-24 80 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