在pymongo动态构建查询

问题描述:

我有一个网页,用户可以在地图上查看来自MongoDB的数据。我想要有几个复选框,单选按钮等来过滤地图上看到的内容。如果我使用的MySQL我会做在pymongo动态构建查询

query = "SELECT * FROM table WHERE x = 1" 
if checkbox == "checked": 
    query += "AND WHERE y = 2" 

我该如何复制与pymongo?

您只需建立查询字典来代替:

query = {'x': 1} 
if checkbox == 'checked': 
    query['y'] = 2 

results = db.collection.find(query) 

做一个OR查询应该是这样的:

query = [{'x': 1}] 
if checkbox == 'checked': 
    query.append({'y': 2}) 

results = db.collection.find({'$or': query}) 
+0

而其更清洁的动态构建蒙戈查询比它是建立原始的sql文本(不是在谈论一个ORM) – jdi

+0

这就像一个魅力!现在,如果我想做OR而不是AND呢? – user1084826

+0

@ user1084826:你应该[阅读文档](http://www.mongodb.org/display/DOCS/OR+operations+in+query+expressions)。它关于如何格式化查询就在那里。 – jdi