如何创建查询以计算数据集中每个用户的标记词的出现次数

时间:2015-12-02 03:16:30

标签: couchdb couchdb-futon

我对couchDB很新,并且遇到了查询问题。

这是我正在使用的数据集

的示例
{
 "_id": "data",
 "_rev": "3-b78ec99614827106f637148c73dbf876",
 "data": [
       {
       "id": 0,
       "tags": [
           "cupidatat",
           "mollit",
           "labore",
           "minim",
           "pariatur",
           "qui",
           "ipsum"
       ]
      },
      {
      "id": 1,
      "tags": [
           "ex",
           "cillum",
           "est",
           "et",
           "mollit",
           "mollit",
           "exercitation"
       ]
       }

这是我的地图功能

function(doc) {
  for(var i in doc.data)
  { 
    var person = doc.data[i];
     for(var tag in person.tags)
       {
         emit(person.tags, 1);
       }
   }
 }

这是减少功能

function(keys, values)
  {
    return sum(values);
  }

我正在尝试生成结果,这些结果将为我提供所有记录的每个标记的出现次数,例如,

key               value  
"cupidatat"         1  

"mollit"            3

如何修复它以便我能获得正确的结果?

1 个答案:

答案 0 :(得分:1)

看起来你非常接近。使用您的示例文档,我使用此地图函数获得了您正在寻找的结果:

function(doc) {
  for (var i = 0; i < doc.data.length; i++) {
    for (var j = 0; j < doc.data[i].tags.length; j++) {
      emit(doc.data[i].tags[j], 1);
    }
  }
}

并使用内置的reduce:

_sum

以下请求以您指定的格式返回JSON:

curl -X GET http://host:5984/db/_design/words/_view/count?reduce=true&group_level=1