python - “串在一起”基于一组条件的pymongo查询

标签 python mongodb pymongo

我需要使用一组条件从 mongodb 数据库中检索一些数据(使用 pymongo)。其中一些条件是可选的,而其他条件可能有不止一个可能的值。

我想知道是否有一种方法可以根据这些条件“动态”构建 pymongo 查询(而不是为每个可能的条件组合创建单独的查询)。

例如,假设我有一个查询必须满足以下条件:

  • tag 包含任何this, is, a, tag
  • 用户johnsmith
  • date_published 早于今天

...而另一个查询可能只限于以下内容:

  • 用户johnsmith
  • date_published 晚于今天

总结:不必创建所有可能的条件组合,有没有一种方法可以将条件串在一起以在 pymongo 中形成查询?

最佳答案

PyMongo 查询只是一个 Python 字典,因此您可以使用所有常用技术即时构建一个:

def find_things(tags=None, user=None, published_since=None):
    # all queries begin with something common, which may
    # be an empty dict, but here's an example
    query = {
        'is_published': True
    }
    if tags:
        # assume that it is an array of strings
        query['tags'] = {'$in': tags}
    if user:
        # assume that it is a string
        query['user'] = user
    if published_since:
        # assume that it is a datetime.datetime
        query['date_published'] = {'$gte': published_since}
    # etc...

    return db.collection.find(query)

您实现的实际逻辑显然取决于您希望根据什么改变查找调用,这些只是几个示例。如果输入来自不受信任的来源(例如 Web 应用程序表单、URL 参数等),您还需要验证输入。

关于python - “串在一起”基于一组条件的pymongo查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8714704/

相关文章:

python - 在 JSON 数组中搜索值

python - 用曲线拟合python猜测曲线的精确演化

java - 当不再需要 DBCursor 时,我应该在方法中关闭它,还是可以将其留给垃圾收集器?

mysql - 将带有 id 的 mySQL 表转换为带有 _id 的 MongoDB 表

python - 如何使用Python提取Mongo中的集合?

python - PyMongo 类型错误

python - 如何使用 pyplot 绘制 2*2 图像网格?

python - 在 Windows 7 中导入 pymssql Unicode 解码错误

javascript - 如果我有 div 中的数据,有人可以更改发送到服务器的数据吗

python - Flask查询Mongodb速度慢