我有两个变量,从ajax发送,如name
和age
,其默认值为' *'。
设置name
和age
时,如name = 'a'
,age = 20
,我可以在mongodb(pymongo)中查询:
info = list(db.test.find({'name': name, 'age': age}))
但有时间age
或name
未设置,我必须写:
if age == '*' and name == '*':
info = list(db.test.find())
elif name == '*':
info = list(db.test.find({'age': age}))
elif age == '*':
info = list(db.test.find({'name': name}))
我可以写一个查询吗?像:
info = list(db.test.find({'name': name, 'age': age}))
答案 0 :(得分:0)
一种选择是将*
视为{'$exists': True}
:
name = {'$exists': True} if name == '*' else name
age = {'$exists': True} if age == '*' else age
info = list(db.test.find({'name': name, 'age': age}))
或者,通过在字典中保留name
和age
,可以更好地解决python问题:
params = {}
if name != '*':
params['name'] = name
if age != '*':
params['age'] = age
info = list(db.test.find(params))
答案 1 :(得分:0)
目前还不清楚您希望查询返回什么,age
和name
的初始值是多少。请创建一个可重现的示例(给出一些示例文档的示例,您正在运行的查询,返回的内容以及您希望返回的内容)。
您是否正在寻找未设置姓名(或年龄)的所有文件?
db.col.find({'name':'*'})
您是否在寻找name
=姓名或age
=年龄的所有文件?
db.col.find({ '$or': [{'name': name } , {'age': age} ] })
请指明您希望查询返回的具体内容。
我不同意alecxe,但你不应该'在python方面解决'。您应该更多地研究如何在MongoDB中编写查询,并让数据库集群在处理方面完成所有繁重工作。只是我的.02。