我正在使用 Django 1.6.8 和 MongoEngine 0.8.2。
我有 2 个类,ServiceDocument 和 OptionDocument。 ServiceDocument 保留 OptionDocuments 的列表。有数百万个 ServiceDocuments(超过 250 万个)。
我想选择每个具有两个以上 OptionDocument 的 ServiceDocument。
我“希望”它能工作,但结果是 0:
ServiceDocument.objects.filter(options__size__gt=2).count()
这就是我的工作:
>>> ServiceDocument.objects.filter(options__size=1).count()
6582
>>> ServiceDocument.objects.filter(options__size=2).count()
2734321
>>> ServiceDocument.objects.filter(options__size=3).count()
25165
>>> ServiceDocument.objects.all().count()
2769768
最后,如果我有更少的 ServiceDocuments 和/或我可以让迭代器工作,我可以自己循环遍历它们,但是在几秒钟后内存填满后我会遇到段错误(我猜对 .all 的任何操作() 将尝试将它们全部收集到内存中)。
对于迭代器,我尝试了以下但没有成功:
iter(ServiceDocument.objects.all())
最佳答案
嗯,我认为您需要为此找到解决方法,因为 mongoengine 不支持您的查询。您可以做的是添加另一个字段,比如“options_length”,并将选项字段的长度存储在其中。然后您可以使用'__gt > 2'进行查询。额外的成本是您需要覆盖模型保存功能以在每次保存时更新长度。您还需要为此更新现有记录。
你也可以阅读这个 question
关于python - 使用 MongoEngine for Django,如何按列表的大小过滤 QuerySet 并大于某个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31049324/