我在后端使用django 1.10和mongodb。对于mongodb我使用的是mongoengine 0.11。 在mongodb中,我有一个名为“test_coll”的集合,其中包含“name”,“dept”和“tag”字段。来自集合的样本数据如下 -
name dept tag
peter dev k1
mark tester k1
sachin dev k1
amit manager k1
我提供清单
dept_list=['dev','tester']
此列表是动态的。
以下是函数
的代码from mongoengine import Q
dept_list=['dev','tester']
output_list = []
query_dept objects = Q()
for dl in dept_list:
query_objects |= Q(dept__iexact=dl)
for details in test_coll.objects.filter(((Q(tag__iexact='k1')) & query_objects )):
output_list.append({'name':details.name,'dept':details.dept,'tag':details.tag})
return output_list
根据列表dept_list=['dev','tester']
和上面提供的示例数据,我从集合中获取详细信息,其中标记为'k1',dept为'dev','tester'。
所以我坚持,如果我提供,dept_list=['']
包含空字符串,那么它应该返回tag ='k1'的所有数据。在我的情况下,它没有返回任何东西。
谁能提供解决方案。提前致谢。
答案 0 :(得分:0)
''
是dept_list中的项目:它并不意味着它是一个空列表。空列表为[]
。因此,您应该在检查列表是否具有该项目的情况下进行条件设置,不要进行过滤,因为没有任何dept
的值为''
。或者,如果列表中有该项,请弹出它。
实际上,您的SQL查询如下所示:SELECT * FROM test_coll WHERE tag="k1" AND dept="";
。进行更改我刚评论它将转向SELECT * FROM test_coll WHERE tag="k1";
。
答案 1 :(得分:0)
那么当dept_list = ['']
时
我不得不从列表中删除空字符串
dept_list = filter(lambda item: item != '', dept_list)
修改后的代码为 -
from mongoengine import Q
dept_list=['']
query_dept objects = Q()
for dl in dept_list:
query_objects |= Q(dept__iexact=dl)
for details in test_coll.objects.filter(((Q(tag__iexact='k1')) & query_objects )):
output_list.append({'name':details.name,'dept':details.dept,'tag':details.tag})
return output_list
所以这给出了预期的输出。