我的 Web 应用程序使用 Python 和 pyMongo 在 MongoDB 上运行。我经常遇到这种情况 - 代码如下:
from pymongo import Connnection
users = Connection().db.users
def findUsers(firstName=None, lastName=None, age=None):
criteria = {}
if firstName:
criteria['firstName'] = firstName
if lastName:
criteria['lastName'] = lastName
if age:
criteria['age'] = age
query = users.find(criteria)
return query
我发现我需要一个 if
语句来确定每个可选的值是否需要进入搜索条件,这有点困惑。如果只有 mongo 在查询中忽略了一个特殊的查询值。那么我的代码可能如下所示:
def findUsers(firstName=<ignored by mongo>, lastName=<ignored by mongo>, age=<ignored by mongo>):
query = users.find({'firstName':firstName, 'lastName':lastName, 'age':age})
return query
现在并没有比以前更清晰,尤其是当您有更多的可选参数时。任何未指定的参数默认为 mongo 忽略的东西。有什么办法吗?或者至少比我目前拥有的更简洁?
最佳答案
您最好在 Python 中过滤空值。您不需要为每个值单独的 if 语句。局部变量可以通过 locals()
访问,因此您可以通过过滤掉所有具有 None
值的键来创建字典。
def findUsers(firstName=None, lastName=None, age=None):
loc = locals()
criteria = {k:loc[k] for k in loc if loc[k] != None}
query = users.find(criteria)
请注意,此语法使用 Python 2.7 中引入的字典理解。如果您运行的是较早版本的 Python,则需要将该行替换为
criteria = dict((k, loc[k]) for k in loc if loc[k] != None)
关于mongodb - Mongodb 是否有一个在查询中被忽略的特殊值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12144670/