mongodb $或在mongo中不使用索引扫描

niknxzdl  于 2022-12-26  发布在  Go
关注(0)|答案(1)|浏览(140)

我试图创建一个聚合管道,它的第一阶段是一个$or查询,但是当我解释聚合执行时,mongo没有使用索引扫描?
我尝试的查询是

pipeline = [
    {
        $match: {
            $or: [activeTill: Date.now(), deleteReason: CONSTANT.NOT_HAPPY]
        }
    }
];

这里我在字段deleteReason上做了一个索引,但没有在activeTill上做索引。
最后我找到了路。看答案。

b4lqfgs4

b4lqfgs41#

$or查询中,mongo只会在您在$match stage中搜索的所有字段都已创建索引时使用索引扫描。即使其中一个查询key没有index,mongo也会使用collscan(我们应该避免)。
我所做的是,我把没有索引的键放在$or主体之外,而把所有其他的放在$or中。在我的用例中,它工作正常。

相关问题