我定义了以下类:
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))
最佳答案
实际上,你错了。
您正在进行一个查询,其中的结果需要包含attrib1='xyz'
或attrib2='abc'
,但您将返回所有字段(属性)。
在修复投影之前,需要更正实际查询以使用bitwise operators而不是and
或or
。
要只指定从数据库返回的某些字段,您需要在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
就是一个queryset
结果,它只包含这三个字段。比你想用结果做什么都好。你在这里做什么:
print(json_util.dumps(cur.attrib1))
是指您正在访问每个文档的
attrib1
并打印它,但实际上所有文档中仍有所有字段。