mongodb - Mongodb 是否有一个在查询中被忽略的特殊值?

标签 mongodb pymongo

我的 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/

相关文章:

java - 如何在 mongo $where 子句中指定 UUID

mongodb - 如何使用 golang 和 mgo 库在 mongodb 中创建文本索引?

java - 如何使用 Spring RabbitMQ 和 MongoDB 捕获连接异常?

javascript - 引用错误 : NumberDecimal is not defined in mongoDB

python - PyMongo 游标迭代

蒙戈数据库 4.2.8 : Unable to add session into the cache because the number of active sessions is too high

python - 如何使用 PyMongo 为现有值(value)增值

javascript - 使用 Mongoose 获取 _id

python - 在 pymongo 中获取嵌入式文档的最佳方式?

python - 使用 pymongo 在 MongoDB 中创建具有父子层次结构的数据库