优化 mongo $ 查询

问题描述 投票:0回答:1

我有一个 mongo 集合,包含大约 550,000 个文档。文档有一个数组字段

path
,我在我的java代码中有一个下面的查询。该字段已建立索引。

问题是下面的查询中的

ids
可能高达 6000,导致查询需要大约 8 秒。尝试使用聚合器将其关闭,但没有成功。

有人可以在这里指导一下还能做什么吗?

Query query = new Query(Criteria.where("ancestors").is(null).and("path").in(ids));
var data = mongoTemplate.findDistinct(query, "path", Orders.class, String.class);
mongodb spring-boot mongodb-query spring-data-mongodb
1个回答
0
投票

当您使用 $in 运算符进行查找查询时,大约 200 个单位后,它将查询转换为单独的 IO 查询。 如果用例位于 seq 中,您应该将它们转换为范围运算符。

例如:

ids.sort()
{ path: {gte: ids[0], lte: ids[n]} }

您可以使用此过滤器获取游标,并使用 next 您可以一条一条地获取记录。 这不会使您的系统 IO 资源过载,您也可以更快地获取数据,而无需上下文切换。

如果您的 id 不在 seq 中,那么您可以将这个大的 req 分成 100 个批次的多个 req,并根据您的用例顺序/并行调用它们。

© www.soinside.com 2019 - 2024. All rights reserved.