2015-10-14 78 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,并打印出来,但实际上所有的文件仍然有里面的所有领域。