我在couchDB中有一个对象,看起来好像是几个数组,我是couchDB的新手,我不知道如何访问它的密钥。该文件如下:
DROP TRIGGER IF EXISTS `update_todo`;
CREATE TRIGGER `update_todo` AFTER DELETE ON `user_todo_send` FOR EACH ROW
BEGIN
UPDATE `todo`
SET status = 1
WHERE id = OLD.id_todo
END;
我只想拥有像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的价值,有人能告诉我如何访问它吗?我已经像往常一样使用JS Arrays尝试了.keys(),我也尝试在使用keys()之前执行JSON.encode,但在这种情况下没有输出。我认为这只是一个微不足道的答案,因为我不知道语法...
问候 埃里克
答案 0 :(得分: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);
}
}
}
}
这显示了相关输出,但我认为它不是非常漂亮的for循环。在大学这样的案例用foreach循环解决了迭代数组,但我没有得到它们的工作。有人能告诉我一个关于这个案子的例子吗?
答案 1 :(得分: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}
]}