Суммируйте два значения в одном представлении отдельно в CouchDB - PullRequest
0 голосов
/ 29 ноября 2018

Итак, предположим, у меня есть следующие два документа в CouchDB:

{
   "_id": "197000000002",
   "_rev": "1-fbe819b01108f30d2e9e96f3fb46eff8",
   "iyear": "1970",
   "region_txt": "North America",
   "country": "130",
   "region": "1",
   "country_txt": "Mexico",
   "nkill": "1",
   "nwound": "1",

}

{
       "_id": "197000000003",
       "_rev": "1-fbe819b01108f30d2e9e96f3fb46eff8",
       "iyear": "1970",
       "region_txt": "North America",
       "country": "130",
       "region": "2",
       "country_txt": "Mexico",
       "nkill": "3",
       "nwound": "1"
    }

Я хочу суммировать все значения nkill и nwound и получить что-то вроде этого:

[1970, "Mexico","North America"]    4, 2

На данный момент я могу только СУММИТЬ одно из двух значений или оба вместе, но это не то, что я хочу.

Моя функция карты теперь выглядит так, как возвращаемая как результат:

function(doc) {
    if(doc.nkill >= 1) {
        emit([doc.iyear,doc.country_txt,doc.region_txt],parseInt(doc.nkill));
    }
}

И я использую _sum для функции уменьшения.

Это возвращает мне ключ и значение, как это:

[1970, "Mexico", "North America"]   4

1 Ответ

0 голосов
/ 03 декабря 2018

Используйте пользовательскую функцию reduce вместо встроенной в CouchDB _sum.

. Вы можете передать массив или объект как значение в функции reduce, отдельно сложить два значения, затемвыведите новый массив / объект.

Чтобы функция reduce могла потреблять объект (например), функцию map следует изменить на что-то вроде:

function(doc) {
    if(doc.nkill >= 1) {
        emit([doc.iyear,doc.country_txt,doc.region_txt],
            {nkill: parseInt(doc.nkill), nwound: parseInt(doc.nwound));
    }
}

Другой способ

После просмотра документов CouchDB выясняется, что сильное предпочтение - возвращать скалярные значения из функции reduce - или массива. Этот вопрос SO охватывает ваш случай использования: как отдельно суммировать два разных значения из одного и того же запроса.

...