如何使用' *'在Mongodb?

时间:2014-12-14 04:47:18

标签: python mongodb pymongo

我有两个变量,从ajax发送,如nameage,其默认值为' *'。

设置nameage时,如name = 'a'age = 20,我可以在mongodb(pymongo)中查询:

info = list(db.test.find({'name': name, 'age': age}))

但有时间agename未设置,我必须写:

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}))

2 个答案:

答案 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}))

或者,通过在字典中保留nameage,可以更好地解决python问题:

params = {}
if name != '*':
    params['name'] = name
if age != '*':
    params['age'] = age

info = list(db.test.find(params))

答案 1 :(得分:0)

目前还不清楚您希望查询返回什么,agename的初始值是多少。请创建一个可重现的示例(给出一些示例文档的示例,您正在运行的查询,返回的内容以及您希望返回的内容)。

您是否正在寻找未设置姓名(或年龄)的所有文件?

db.col.find({'name':'*'})

您是否在寻找name =姓名或age =年龄的所有文件?

db.col.find({ '$or': [{'name': name } , {'age': age} ] })

请指明您希望查询返回的具体内容。

我不同意alecxe,但你不应该'在python方面解决'。您应该更多地研究如何在MongoDB中编写查询,并让数据库集群在处理方面完成所有繁重工作。只是我的.02。