我有一个聚合的mongodb查询
db.collection.aggregate([
{$match: {a: "a1", b: "b1"}},{$group: {...}},
{$sort: {...}}, {$limit: {10}}
])
我在a和b上有一个复合索引,查询很快。
然而,当我将比赛更改为
时 $match: {$or: [{a: "a1", b: "b1"}, {a: "a2", b: "b2"}]}
查询变得非常慢,似乎没有使用任何索引。
有没有办法1)重写查询以使用复合索引(作为单个查询)或2)强制它使用索引?
答案 0 :(得分:0)
我会尝试在聚合的开头添加一个排序步骤,以查看它是否强制使用您的索引。
db.collection.aggregate([
{$sort: {a:1, b:1}},
{$match: {$or: [{a: "a1", b: "b1"}, {a: "a2", b: "b2"}]}},
...
])