【问题标题】:Filtering an embedded list in MongoEngine过滤 MongoEngine 中的嵌入列表
【发布时间】:2011-09-10 00:10:12
【问题描述】:

如果我有这些模型:

class Sub(EmbeddedDocument):
    name = StringField()

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

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

Main.objects.filter(subs__name__exists=True)

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

【问题讨论】:

    标签: python mongodb mongoengine


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-05
      • 2016-08-28
      • 1970-01-01
      • 2016-09-04
      • 2016-08-02
      • 2022-10-21
      • 1970-01-01
      相关资源
      最近更新 更多