У меня есть документ с приведенной ниже структурой, и я хочу получить итог за последние 2 месяца, добавив 2013.5 и 2013.4, как часть процесса получения 10 лучших пакетов.
Если я использую совокупность
db.hits.aggregate(
{$project:{"total":{"$add":["$value.2013.5", "$value.2013.4"]}}})
это вернет общее числовое значение, только если оба поля существуют в документе. Если какое-либо из полей отсутствует, итог имеет значение null. Любые идеи, как я могу ориентироваться в этом. Есть $group, $sort, $limit, следующие за $project, но я опустил их для ясности.
{
"_id" : "4e6eef33-d88a-4d4d-a6b2-6becf1be7e8f",
"value" : {
"package" : 4498
"2012" : {
"1" : 1.0,
"2" : 1.0,
"4" : 1.0,
"6" : 4.0,
"7" : 2.0,
"8" : 5.0,
"12" : 1.0,
"hits" : 15.0
},
"2013" : {
"1" : 6.0,
"4" : 2.0,
"hits" : 8.0
},
"hits" : 23.0
}
}
Кстати, два месяца я использую только для иллюстрации. Обычно я использую 12 месяцев.
Изменить: мой запасной вариант - написать функцию, которая добавляет недостающие поля в документ. Мне интересно, есть ли способ избежать этого.