4

如果我有这些模型:

class Sub(EmbeddedDocument):
    name = StringField()

class Main(Document):
    subs = ListField(EmbeddedDocumentField(Sub))

我想要一个返回 Mains 的查询,其中 subs 按名称过滤

Main.objects.filter(subs__name__exists=True)

这将返回正确的 Mains,但 Subs 始终是整个列表,而不是子集。我怎样才能只得到子集?我需要依赖列表推导吗?

4

1 回答 1

3

MongoDB 不完全支持您请求的此操作,因此 Mongoengine 也不支持。

您可以对数组(列表)执行切片操作,但不能执行临时过滤。在 MongoDB 数组中切片的工作方式类似于在 Python 中切片列表,您可以使用 Mongoengine 使用slice__关键字语法来实现:

Main.objects.filter(subs__name__exists=True).fields(slice__subs=[0,2])

这将返回从索引 0(即第一个元素)开始的 subs,然后返回两个元素。

于 2011-09-10T13:39:59.560 回答