2015-10-14 113 views
2

預測我已經定義了以下類:查詢與mongoengine

class abc(Document) 
    attrib1 = StringField() 
    attrib2 = StringField() 
    attrib3 = StringField() 
    . 
    . 
    attrib30 = StringField() 

我需要只attrib1, attrib2, attrib3作爲JSON輸出。我如何才能使用我的文檔中的3個屬性進行投影?

這裏是我的查詢其適用於一個屬性:

for cur in abc.objects(Q(attrib1='xzy') or Q(attrib2='abc')): 
    print(json_util.dumps(cur.attrib1)) 

回答

1

其實,你錯了。

您正在查詢的結果需要包含attrib1='xyz'attrib2='abc',但您要返回所有字段(屬性)。

在修復投影之前,需要更正實際查詢以使用bitwise operators而不是andor

要僅指定要從數據庫返回的某些字段,您需要在projection中指定該字段。

abc.objects(Q(attrib1='xzy') | Q(attrib2='abc'))

在MongoEngine你可以通過使用only

result = abc.objects(Q(attrib1='xzy') | Q(attrib2='abc')).only('attrib1', 'attrib2', 'attrib3') 

這樣,result是含有具有隻有3場結果的queryset。比你可以做你想要的結果。

你在做什麼在這裏:

print(json_util.dumps(cur.attrib1))

是你訪問的每個文檔的attrib1,並打印出來,但實際上所有的文件仍然有裏面的所有領域。