Couchdb документ/функция

В документ със следната информация:

{
  "address": [{
    "Street": "123 xyz", 
    "City": "Belmont"
  }]
}

Как мога да видя имената на градовете. Дали това е правилно:

function(doc) {
  emit(doc.address.City,null);
}

Връща само null. Исках да видя името "Белмонт". Всяка помощ ще бъде оценена.


person user3323595    schedule 21.02.2014    source източник


Отговори (1)


Във вашите данни address е масив, така че няма свойство City.

Ако имате само един адрес в данните си:

{
  "address": {
    "Street": "123 xyz", 
    "City": "Belmont"
  }
}

Получаването на /{database}/_design/{ddoc}/_view/{view} трябва да върне:

{"rows":[
  {"key":"Belmont", "id":"{id}", "value":null}
]}

Като странична бележка, моля, имайте предвид, че можете също да получите /{database}/_design/{ddoc}/_view/{view}?include_docs=true:

{"rows":[
  {"key":"Belmont", "id":"{id}", "value":null, "doc":{
    "address": {
      "Street": "123 xyz", 
      "City": "Belmont"
    }
  }}
]}

Не на последно място, ако наистина имате нужда от няколко адреса във вашите данни, можете да ги изпратите всички:

function(o) {
  for each (var a in o.address) {
    emit(a.City);
  }
}
person Aurélien    schedule 21.02.2014
comment
{ име: jack, адрес: [{ Улица: 123 xyz, Град: Белмонт }] } ако имах и име, ще мога ли да видя името до града въз основа на последната функция, която сте написали. Благодаря за вашата помощ. искам да видя името да е ключът и градът като стойност. - person user3323595; 21.02.2014
comment
С include_docs=true наистина получавате пълния документ (с Джак и всичките му адреси). Това, което трябва да запомните е, че key е това, което използвате, за да изберете или сортирате редовете, value е или резултат от сложно изчисление, което искате да запазите, или частичен резултат, който искате да обобщите с функция reduce, doc е, добре, целият документ. - person Aurélien; 21.02.2014