alternate mongo aggregate query

时间:2015-01-21 18:41:07

标签: mongodb indexing aggregation-framework

我有一个聚合的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)强制它使用索引?

1 个答案:

答案 0 :(得分:0)

我会尝试在聚合的开头添加一个排序步骤,以查看它是否强制使用您的索引。

db.collection.aggregate([
    {$sort: {a:1, b:1}},
    {$match: {$or: [{a: "a1", b: "b1"}, {a: "a2", b: "b2"}]}},
    ...
])