Как получить конкретные данные из представления в документе CouchDB - PullRequest
1 голос
/ 29 июня 2019

Я хочу посчитать количество зданий на город в моих документах. Это один из тех документов с городом Кентукки, у меня всего 6 городов. Когда я использую doc._id, он возвращает идентификатор, но когда я использую doc.city, он возвращает ноль. Как мне показать сумму застройки по городу?

Документ в CouchDB:

{
  "_id": "729489bb6702c473bb72254d13003f85",
  "_rev": "1-50da566becf84a0a686853290c2ad8a5",
  "Projects": [
    {
      "city": "Kentucky",
      "amount of people living": "853312",
      "overview": [
        {
          "building": "Center building",
          "amount of people": "150000",
          "teams": [
            {
              "party": "xd",
              "vote": "20000"
            },
            {
              "party": "zh",
              "vote": "20000"
            },
            {
              "party": "gh",
              "vote": "5000"
            },
            {
              "party": "sd",
              "vote": "20000"
            }
          ]
        },
        {
          "building": "Left building",
          "amount of people": "120000",
          "teams": [
            {
              "party": "gh",
              "vote": "20000"
            },
            {
              "party": "sw",
              "vote": "15000"
            },
            {
              "party": "gj",
              "vote": "5000"
            }
          ]
        },
        {
          "building": "Right building",
          "amount of people": "200000",
          "teams": [
            {
              "party": "sd",
              "vote": "20000"
            },
            {
              "party": "gs",
              "vote": "10000"
            },
            {
              "party": "er",
              "vote": "4000"
            }
          ]
        }
      ]
    }
  ]
}

Что я хочу:

Key     | Value
---------------
Kentucky| 3      

То, что я пытался использовать и вернул ноль:

function (doc) {
  emit(doc._id, doc.building);
}

Какой результат был:

{"total_rows":3,"offset":0,"rows":[
{"id":"729489bb6702c473bb72254d13003f85","key":"729489bb6702c473bb72254d13003f85","value":null},
{"id":"729489bb6702c473bb72254d13007c22","key":"729489bb6702c473bb72254d13007c22","value":null},
{"id":"729489bb6702c473bb72254d130095fb","key":"729489bb6702c473bb72254d130095fb","value":null}
]}

1 Ответ

0 голосов
/ 01 июля 2019

У вас должно быть хорошее представление о карте и функциях сокращения в CouchDB. Функция карты фильтрует ваши данные и выдает пары ключ-значение, которые сортируются по ключу. Функция Reduce используется для уменьшения результатов функции карты. Основное программирование заключается в функции сокращения для получения желаемого конечного результата.

Для вашего случая, функция Map должна выглядеть как

function (doc) {

  for( var i in doc.Projects){

  emit(doc.Projects[i].city,doc.Projects[i].overview);

  }
}

и функция уменьшения должны быть

function (keys, values, rereduce) {

   if (rereduce){


     return sum (values);

   }else{


    return values[0].length;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...