0

我的 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); 
        });
    }
}

也许有人可以帮我找到解决方案?

4

1 回答 1

2

请注意:

  • CouchDB 函数emit()有两个参数,第一个是键(例如。"category1"),第二个是值(例如。5)。请参阅CouchDB wiki 中记录的视图 API 。
  • [key:val, ...]不是正确的 JSON 字段语法,您是指单字段记录列表 ( [{"key1": val1}, {"key2": val2}, ...]) 还是单个多字段记录 ( {"key1": val1, "key2": val2, ...})?
  • 如果延续的"name": [{ "category1": 5}, {"category2": 8 }]论点是,你应该以某种方式和分开(或再次??)。forEach{"category1": 5}"category1"5forEach()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 插件)。祝你好运!

于 2013-06-11T08:40:44.103 回答