我试图创建一个聚合管道,它的第一阶段是一个$or查询,但是当我解释聚合执行时,mongo没有使用索引扫描?
我尝试的查询是
pipeline = [
{
$match: {
$or: [activeTill: Date.now(), deleteReason: CONSTANT.NOT_HAPPY]
}
}
];
这里我在字段deleteReason
上做了一个索引,但没有在activeTill
上做索引。
最后我找到了路。看答案。
1条答案
按热度按时间b4lqfgs41#
在
$or
查询中,mongo只会在您在$match
stage中搜索的所有字段都已创建索引时使用索引扫描。即使其中一个查询key
没有index
,mongo也会使用collscan
(我们应该避免)。我所做的是,我把没有索引的键放在
$or
主体之外,而把所有其他的放在$or
中。在我的用例中,它工作正常。