Из-за того, как вы сохранили свои данные, любой запрос вернет весь этот объект. Теперь вам просто нужно запросить этот объект локально, используя выбранный вами язык программирования.
Чтобы заставить MongoDB выполнять свою работу, вам лучше хранить объекты даты и значения в качестве документов верхнего уровня, например
{
"d" : ISODate("2006-11-14T00:00:00.000Z"),
"v" : 10.0
}
Если вам нужна другая идентифицирующая информация, она может быть включена в этот документ. Теперь, чтобы найти любой диапазон значений, который вы можете сделать,
db.col.find( { "d" : { "$gte" : ISODate("2006-11-29T00:00:00.000Z"), "$lte" : ISODate("2006-12-01T00:00:00.000Z")}})
, тогда вы можете суммировать значения v
в коде. В качестве альтернативы вы можете использовать структуру агрегации.
> match
{
"$match" : {
"d" : {
"$gte" : ISODate("2006-11-29T00:00:00Z"),
"$lte" : ISODate("2006-12-01T00:00:00Z")
}
}
}
> db.col.aggregate( [match, {"$group" : { "_id" : "range_sum", "total" : {"$sum": "$v"}}}])
{ "_id" : "range_sum", "total" : 31.39 }
>
Подробнее см. Документацию $ group .
Я рекомендую добавить index в поле d
, чтобы сделать запрос эффективным.