在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})
而其更清洁的动态构建蒙戈查询比它是建立原始的sql文本(不是在谈论一个ORM) – jdi
这就像一个魅力!现在,如果我想做OR而不是AND呢? – user1084826
@ user1084826:你应该[阅读文档](http://www.mongodb.org/display/DOCS/OR+operations+in+query+expressions)。它关于如何格式化查询就在那里。 – jdi