2015-06-06 3 views
1

У меня есть объект в couchDB, и в этом выглядит несколько массивов, im new для couchDB, и я не знаю, как получить доступ к его ключам. Документ выглядит следующим образом:Ключи карты для испускания функции

{ 
    "_id": "113232", 
    "_rev": "1-c967a81c0eccba6a7c92e3c4b352d4eb", 
    "name": "Ezequiel Campion", 
    "vorlesungen": [ 
     { 
      "Ethik": 1.7 
     }, 
     { 
      "Glaube und Wissen": 5 
     }, 
     { 
      "Logik": 1.7 
     }, 
     { 
      "Bioethik": 1.7 
     }, 
     { 
      "Erkenntnistheorie": 1 
     }, 
     { 
      "Grundzuege": 4 
     }, 
     { 
      "Der Wiener Kreis": 1.7 
     } 
    ] 
} 

Я просто хочу, чтобы иметь ключи как Ethik, Glaube унд Wissen, ... а не значение в этих клавиши. Мои фактические функции карта выглядит следующим образом:

function(doc) { 
    emit(doc.vorlesungen, null); 
    } 

выход, например:

[{"Bioethik": 1}] 

теперь я только хочу значение Bioethik, может кто-нибудь сказать мне, как получить к нему доступ? Я уже пробовал .keys(), как обычно, с массивами JS, и я также попытался выполнить JSON.encode перед использованием ключей(), но в этом случае нет вывода. Я думаю, что это будет просто тривиальный ответ, потому что я не знаю синтаксис ...

С уважением Эрик

ответ

1

после длительного тестирования я нашел решение моей проблемы:

function(doc) { 
    var vorl; 
    if(doc.vorlesungen){ 
    for(i=0;i<doc.vorlesungen.length;i++){ 
     for(vorl in doc.vorlesungen[i]){ 
     emit(vorl, 1); 
     } 
    } 
    } 
} 

это показывает мне Corret выход, но я думаю, что это не очень красивая причина для циклов for. В таких случаях колледжи были решены с помощью циклов foreach, чтобы перебирать массив, но я не работаю. Может ли кто-нибудь показать мне пример для этого случая, пожалуйста?

+1

Разве это не то же самое, что было представлено перед решением @Akshat Jiwan Sharma? просто с традиционным - нефункциональным - итерация массива –

+0

Я пробовал версию @Akshat Jiwan Sharma, но это не дало мне выхода, я не знаю, почему ... – elanfer

+0

@elanfer без проблем :) все работает для тебя. –

0

Это то, что вы ищете?

function(doc){ 
    doc.vorlesungen.forEach(function(item){ 
     if(typeof(item) === "object"){ 
      var keys = Object.keys(item); 
     keys.forEach(function(key){emit(key)}) 
     } 
    }); 
} 

Код итерации по массиву doc.vorlesungen. Если объект является объектом, он получает все ключи объекта. Затем для каждого полученного таким образом ключа он испускает его.

Это результат я получаю при запуске вида

{"total_rows":7,"offset":0,"rows":[ 
{"id":"113232","key":"Bioethik","value":null}, 
{"id":"113232","key":"Der Wiener Kreis","value":null}, 
{"id":"113232","key":"Erkenntnistheorie","value":null}, 
{"id":"113232","key":"Ethik","value":null}, 
{"id":"113232","key":"Glaube und Wissen","value":null}, 
{"id":"113232","key":"Grundzuege","value":null}, 
{"id":"113232","key":"Logik","value":null} 
]} 
+0

спасибо за ваш ответ, но этот код не дает мне никакого вывода, я выполняю его на futon webinterface для couchdb (v1.3.0). Есть ли способ устранить сценарий в этом интерфейсе? – elanfer

+0

Существует функция [log()] (http://docs.couchdb.org/en/latest/query-server/javascript.html?highlight=log#log), которая может помочь вам немного отлаживать. –

Смежные вопросы