Python mongoengine中的投影查询
我定义了以下类:Python mongoengine中的投影查询,python,mongodb,mongoengine,Python,Mongodb,Mongoengine,我定义了以下类: class abc(Document) attrib1 = StringField() attrib2 = StringField() attrib3 = StringField() . . attrib30 = StringField() 我只需要将attrib1、attrib2、attrib3作为json输出。如何仅使用文档中的3个属性进行投影 以下是我对一个属性的查询: for cur in abc.objects(Q(a
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'
,但您将返回所有字段(属性)
在修复投影之前,需要将实际查询更正为使用,而不是和
或或
要仅指定要从数据库返回的特定字段,需要在中指定该字段
abc.objects(Q(attrib1='xzy')| Q(attrib2='abc'))
在MongoEngine中,您可以仅使用来执行此操作:
result = abc.objects(Q(attrib1='xzy') | Q(attrib2='abc')).only('attrib1', 'attrib2', 'attrib3')
通过这种方式,result
是一个只包含这3个字段的结果。然后你就可以用结果做你想做的事
你在这里做什么:
打印(json_util.dumps(cur.attrib1))
您正在访问每个文档的attrib1
,并将其打印出来,但实际上所有文档中仍然包含所有字段
from app.models import myCollection
from mongoengine import connect
connect('MyDBName')
# Fetch the data using projection (only)
data = myCollection.objects(key1='val1', timestamp=datetime(2021, 2, 17, 13, 9, 25)).only('field1', 'field2', 'field3')
# then access the data like below:
print("Data length= %d, Type= %s" %(len(data), type(data)))
print("value = ", data[0].field1)
答复如下:
Data length= 366, Type= <class 'flask_mongoengine.BaseQuerySet'>
value = field1_value
数据长度=366,类型=
值=字段1\u值