Есть запрос вида:
db.foo.aggregate([{$group: {_id: 1, 'myavg': {$avg:'$value'}}}])
В базе миллион записей. Работает в пределах 2-3 секунд. Это слишком много, хотелось бы быстрее.
Если я правильно понял монга 3.2, может использовать при агрегации обычные индексы.
Changed in version 3.2: Starting in MongoDB 3.2, indexes can cover an aggregation pipeline. In MongoDB 2.6 and 3.0, indexes could not cover an aggregation pipeline since even when the pipeline uses an index, aggregation still requires access to the actual documents.
https://docs.mongodb.org/manual/core/aggregation-p...
Но построение индекса
db.foo.ensureIndex({value:1})
кажется на ситуацию не влияет
explain выглядит так:
{
"waitedMS" : NumberLong(0),
"stages" : [
{
"$cursor" : {
"query" : {
},
"fields" : {
"correct" : 1,
"_id" : 0
},
"queryPlanner" : {
"plannerVersion" : 1,
"namespace" : "mydb.foo",
"indexFilterSet" : false,
"parsedQuery" : {
"$and" : [ ]
},
"winningPlan" : {
"stage" : "COLLSCAN",
"filter" : {
"$and" : [ ]
},
"direction" : "forward"
},
"rejectedPlans" : [ ]
}
}
},
{
"$group" : {
"_id" : {
"$const" : 1
},
"myavg" : {
"$avg" : "$correct"
}
}
}
],
"ok" : 1
}