更好地查找 ID 不在列表中的文档并在某个发布日期进行排序

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

我尝试过下面的代码,但是性能测试表明,每个请求的请求量约为一秒或更多。我希望比这更好10倍。我怀疑它正在进行全面扫描,因为 NOT。有没有办法让 NOT $in 运行得更快?也许将其重写为其他东西?我尝试使用 $lookup 将临时集合与常规集合连接起来,但是速度更慢,因为必须创建新集合、插入数据、运行 $lookup 查询,然后再次删除临时集合。我猜不存在“负”指数这样的东西,或者存在吗?.

const filter = {
         state: "Live",
         id: { $not: { $in: ids } },
         "type": "Message",
       };
const docs = await MyModel.find(filter, { _id: 0, __v: 0 })
         .sort({ "live_date": -1 })
         .lean();
}
typescript mongodb mongoose
1个回答
0
投票

首先,一定要使用explain()检查查询计划。

如果不好,也许尝试hint(),看看是否有帮助。

如果您使用的是最新版本,并且查询优化器在处理 $not : $in 时不够“智能”,请考虑打开 jira 票证?

你的基数真的是不带索引更好吗?即淘汰一小部分带有索引的项目并不会提高数据库的性能。

另外,考虑使用/添加 limit() 吗?您真的想要所有结果还是只想要第一页?有时这会产生很大的不同。对于典型的数据分布查询, $not : $in 应该返回大部分集合,所以如果它很大那就很多了?

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