mongodb 在查询中优化mongo $

46scxncf  于 11个月前  发布在  Go
关注(0)|答案(1)|浏览(146)

我有一个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);

字符串

1yjd4xko

1yjd4xko1#

当你使用$in操作符进行查找查询时,在大约200个单元之后,它会将查询转换为单独的IO查询。如果它们在seq中,你应该将usecase转换为range操作符。
例如:

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

字符串
你可以得到一个游标与此过滤器和使用next你可以获取记录一个接一个.这将不会超载你的系统IO资源,你会得到数据甚至更快没有上下文切换以及.
如果您id不在seq中,那么您可以将大型请求分成100个批次的多个请求,并根据您的用例顺序/并行调用它们。

相关问题