【发布时间】:2021-05-12 20:33:41
【问题描述】:
我只需要查询包含满足多个条件的 EmbeddedDocument 的文档子集。
在以下构造不佳的示例中,我创建了两个简单的文档...
from mongoengine import EmbeddedDocument, StringField, IntField, Document, EmbeddedDocumentListField, Q
class Feature(EmbeddedDocument):
name = StringField(required=True)
charges = IntField(required=True)
class Character(Document):
name = StringField(required=True)
features = EmbeddedDocumentListField(Feature)
c = Feature(name='chair', charges=2)
u = Feature(name='umbrella', charges=1)
p1 = Feature(name='potion', charges=1)
p2 = Feature(name='potion', charges=4)
m = Character(name='Magnus', features=[c, p1])
t = Character(name='Taako', features=[u, p2])
m.save()
t.save()
然后我尝试查询包含名为“药水”且费用低于 3 的特征的文档。
matched_characters = Character.objects(Q(features__name='potion')
& Q(features__charges__lt=3))
print(matched_characters.to_json())
然而,这会返回两个文档,因为它们都包含一个名为“药水”的功能,并且都包含一个收费小于 3 的功能,但是 我真正想要的是只返回一个具有名为'的功能的文档药水少于 3 次。 我怎样才能做到这一点?
这个变种的结果是一样的:
matched_characters = Character.objects(features__name='potion',
features__charges__lt=3)
【问题讨论】:
标签: python mongoengine