losaped
@losaped
Пьяный самурай

Как правильно написать mapReduce для MongoDB?

Добрый день. Помогите пожалуйста разобраться. Есть коллекция bankGuarantee
пишу вот так mapReduce:
var map = function(){
    var key = {
        regNum: this.regNumber,
        bank_name: this.bank.shortName,
        bank_inn: this.bank.INN,
        year: this.guarantee.guaranteeDate.getFullYear(),   //Дата выдачи БГ.Год
        month: this.guarantee.guaranteeDate.getMonth(),     //Дата выдачи БГ.Месяц
        category: getCategory(this.guarantee.guaranteeAmount)
    };
    
    emit(key, {count:1, bg_amount: this.guarantee.guaranteeAmount /*,Сумма контракта*/});
}

var reduce = function(key, values){
    var bg_count = 0;
    var bg_amount = 0;
    
	values.forEach(function(value) {
		bg_count += value['count'];
		bg_amount += value['bg_amount'];
	});
	
	return {count: bg_count, amount: bg_amount};
}

db.bankGuarantee.mapReduce(map, reduce, {out: 'bg_stats'});

не могу понять некоторые моменты:
1. в ключе есть поле regNum: this.regNumber, но оно мне не нужно в ключе, мне нужно, чтобы для всех ключей count считался по среднему, типа avg в sql если в ключе документ с одним и тем же кодом встречается n раз, то count по этим документам должен равняться одному, как это правильно написать?
2. year: this.guarantee.guaranteeDate.getFullYear() поле guaranteeDate в некоторых документах может или отсутствовать или называться по другому, как лучше обработать такую ситуацию?
3. Еще и год в результате возвращается как Double как сделать, чтобы целое число было?
  • Вопрос задан
  • 291 просмотр
Решения вопроса 1
longclaps
@longclaps
если в ключе документ с одним и тем же кодом встречается n раз, то count по этим документам должен равняться одному
Что ты имеешь в виду, Роман?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
D2C.io Екатеринбург
от 75 000 руб.
от 60 000 до 120 000 руб.
FunCorp Москва
от 180 000 до 250 000 руб.
18 апр. 2019, в 20:45
750 руб./в час
18 апр. 2019, в 20:33
300 руб./за проект
18 апр. 2019, в 20:27
50000 руб./за проект