如果我有这些模型:
class Sub(EmbeddedDocument):
name = StringField()
class Main(Document):
subs = ListField(EmbeddedDocumentField(Sub))
我想要一个返回Mains的查询,其中subs按名称现有
进行过滤Main.objects.filter(subs__name__exists=True)
这将返回正确的Mains,但Subs始终是整个列表,而不是子集。我怎样才能获得子集?我需要依赖列表推导吗?
答案 0 :(得分:2)
MongoDB不支持您正在请求的此操作,因此Mongoengine也不支持。
您可以对阵列(列表)执行切片操作,但不能对ad-hoc过滤执行切片操作。在MongoDB数组中切片的工作方式类似于在Python中切片列表,您可以使用slice__
关键字语法对Mongoengine进行切换:
Main.objects.filter(subs__name__exists=True).fields(slice__subs=[0,2])
这将返回从索引0开始的subs(即第一个元素),然后返回两个元素。