python - 使用 MongoEngine for Django,如何按列表的大小过滤 QuerySet 并大于某个值?

标签 python django mongoengine

我正在使用 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/

相关文章:

python - 遍历 mongoengine Document 中所有字段并检查每个字段是否为特定类型和 is_required 的方法

python - mongoengine : ReferenceFields will default to using ObjectId 中的问题

python - python/numpy中的线性组合

python - 如何在Python中获取数组中所有NaN元素的索引?

python - OpenCV VideoCapture 未打开

python - 在单个模型的多个模型中使用外键时出现 django 错误

python - 代码以交互方式运行时显示结果,但从 shell 运行时不显示

django - 当我使用 nginx 和 docker-compose 时,在上游找不到主机

python - 我可以过滤用户以要求在给定范围内的每个日期都匹配条目吗?

python - 使用 mongoengine 将文件保存到 MongoDB GridFS 时遇到问题