2017-03-08 88 views
0

我使用Django 1.10和MongoDB在後端的過濾數據。對於mongodb,我使用的是mongoengine 0.11。 在MongoDB中,我已經收集名爲「test_coll」,其中包含字段「姓名」,「部門」和「標籤」。從採集的樣本數據是作爲後續Django的查詢中設置過濾,如何動態列表

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_list=['']包含空字符串,那麼它應該返回所有的數據,其中標籤=「K1」。在我的情況下,它不會返回任何東西。 任何人都可以提供解決方案。提前致謝。

回答

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 

所以這給預期的輸出。

0

''是dept_list中的一項:它並不意味着它是一個空的列表。一個空的列表是[]。因此,如果您檢查列表中是否包含該項目,請勿過濾,因爲您沒有任何dept的值爲''。或者如果列表中有該項目,請將其彈出。

其實,你的SQL查詢看起來像這樣:SELECT * FROM test_coll WHERE tag="k1" AND dept="";。做出改變,我剛剛評論它會變成SELECT * FROM test_coll WHERE tag="k1";

+0

是的。我已經想通了。感謝幫助。 :) – sachin27