我有一个 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);
当您使用 $in 运算符进行查找查询时,大约 200 个单位后,它将查询转换为单独的 IO 查询。 如果用例位于 seq 中,您应该将它们转换为范围运算符。
例如:
ids.sort()
{ path: {gte: ids[0], lte: ids[n]} }
您可以使用此过滤器获取游标,并使用 next 您可以一条一条地获取记录。 这不会使您的系统 IO 资源过载,您也可以更快地获取数据,而无需上下文切换。
如果您的 id 不在 seq 中,那么您可以将这个大的 req 分成 100 个批次的多个 req,并根据您的用例顺序/并行调用它们。