映射键以发出函数
Map keys to emit function
我在 couchDB 中有一个对象,这看起来像是几个数组,我是 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 值,谁能告诉我如何访问它?我已经像往常一样尝试使用 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);
}
}
}
}
这向我显示了正确的输出,但我认为这不是 for 循环的原因。在像这样的大学案例中,使用 foreach 循环迭代数组解决了这个问题,但我没有让他们工作。任何人都可以向我展示这个案例的 foreach 示例吗?
我在 couchDB 中有一个对象,这看起来像是几个数组,我是 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 值,谁能告诉我如何访问它?我已经像往常一样尝试使用 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);
}
}
}
}
这向我显示了正确的输出,但我认为这不是 for 循环的原因。在像这样的大学案例中,使用 foreach 循环迭代数组解决了这个问题,但我没有让他们工作。任何人都可以向我展示这个案例的 foreach 示例吗?