基于条件串联 pymongo 查询
我有一组条件,需要用来从mongodb数据库中获取一些数据(使用pymongo)。其中一些条件是可选的,还有一些条件可能有多个值。
我在想有没有办法根据这些条件“动态”构建一个pymongo查询,而不是为每种可能的条件组合都创建一个单独的查询。
举个例子,假设我有一个查询需要满足以下条件:
tag
包含this
、is
、a
、tag
中的任意一个user
是johnsmith
date_published
在today
之前
...而另一个查询可能只需要满足以下条件:
user
是johnsmith
date_published
在today
之后
总结:有没有办法把条件串联起来,形成一个pymongo查询,而不需要创建每一种可能的条件组合?
1 个回答
5
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)
你具体实现的逻辑当然取决于你想要根据什么来变化你的查找调用,这里只是一些例子。如果输入来自不可信的来源(比如网页表单、网址参数等),你还需要对输入进行验证。