Javascript 映射关键点以发射函数
我在couchDB中有一个对象,在这里看起来有几个数组,我是couchDB的新手,我不知道如何访问它的密钥。该文档如下所示:Javascript 映射关键点以发射函数,javascript,object,mapreduce,couchdb,nosql,Javascript,Object,Mapreduce,Couchdb,Nosql,我在couchDB中有一个对象,在这里看起来有几个数组,我是couchDB的新手,我不知道如何访问它的密钥。该文档如下所示: { "_id": "113232", "_rev": "1-c967a81c0eccba6a7c92e3c4b352d4eb", "name": "Ezequiel Campion", "vorlesungen": [ { "Ethik": 1.7 }, { "G
{
"_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
}
]
}
function(doc) {
emit(doc.vorlesungen, null);
}
我只想要像Ethik,Glaube和Wissen这样的钥匙,。。。不是此键的值。
我的实际映射函数如下所示:
{
"_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
}
]
}
function(doc) {
emit(doc.vorlesungen, null);
}
例如,输出为:
[{"Bioethik": 1}]
现在我只想要生物伦理的价值,有人能告诉我如何获得它吗?我已经像往常一样在JS数组中尝试过.keys(),我也尝试过在使用keys()之前执行JSON.encode,但在这种情况下没有输出。我认为这只是一个微不足道的答案,因为我不知道语法
问候
埃里克这就是你要找的吗
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}
]}
经过长期测试,我找到了解决问题的方法:
function(doc) {
var vorl;
if(doc.vorlesungen){
for(i=0;i<doc.vorlesungen.length;i++){
for(vorl in doc.vorlesungen[i]){
emit(vorl, 1);
}
}
}
}
功能(doc){
var vorl;
如果(vorlesungen博士){
对于(i=0;我想知道您的答案,但这段代码没有给我任何输出,我正在futon webinterface for couchdb(v1.3.0)上执行它。有什么方法可以解决这个界面中的脚本问题吗?有一个函数可以帮你调试一下。它和之前介绍的@Akshat Jiwan Sharma的解决方案不一样吗?只是用传统的-非函数-数组迭代我试过@Akshat Jiwan Sharma的版本,但它没有给我输出,我不知道是什么为什么。。。