我的couchdb数据库中有几个文档,它们都是:
{
"_id":"1234567890",
"name": [
"category1": 5,
"category2": 8
]
}
我想要一个map函数,它给我“category1”作为键,5作为值。 我只是不能将“类别”和5分开。
我尝试了以下内容:
function(doc){
if(doc.name){
doc.name.forEach(function(sth) {
emit(sth, null);
});
}
}
也许有人可以帮我找到解决方案?
答案 0 :(得分:2)
请注意:
emit()
有两个参数,第一个是密钥(例如"category1"
),第二个是值(例如5
)。请参阅CouchDB wiki中记录的view API。[key:val, ...]
是不正确的JSON字段语法,您是指单个字段记录列表([{"key1": val1}, {"key2": val2}, ...]
)还是单个多字段记录({"key1": val1, "key2": val2, ...}
)?"name": [{ "category1": 5}, {"category2": 8 }]
延续的forEach
参数为{"category1": 5}
,您应该以某种方式单独"category1"
和5
forEach()
或再次for (var key in sth) {}
??)。"name": { "category1": 5, "category2": 8 }
,请记住JS对象({"field": val, ...}
)没有forEach
方法,数组([val1, val2, ...]
)原型。假设您使用"name": { "category1": 5, "category2": 8 }
作为名称,请考虑尝试以下map
:
function (data) {
if (date.name) {
for (var sth in name) {
emit(sth, name[sth]);
}
}
}
如果您是JavaScript初学者,请先尝试在控制台中编写正确的代码。你可以使用网络浏览器中的一个(Firefox,Chrome有内置版本,我建议使用Firefox的FireBug插件)。祝你好运!