计算couchdb文档中的标记数

时间:2017-06-12 17:50:13

标签: javascript mapreduce couchdb

我有一个简单的文档设计,就像这样......

{
  _id: "something", 
  type: "post", 
  title: "A Title",
  content: "A Blog Content",
  tags: ["newtag", "oldtag", "bluetag", "youtag"]
}

因此每个文档都有一个"标记"数组。我想要做的是创建一个视图,计算标签的使用次数。因此,它将搜索所有文档,发出标记,然后按键添加它们。实施例...

Doc1
{
  _id: "something",
  type: "post",
  title: "A title",
  content: "Blog Content",
  tags: ["oldtag", "newtag", "bluetag", "youtag"]
}
Doc2
{
  _id: "domethin",
  type: "post",
  title: "another title",
  content: "another post",
  tags: ["oldtag", "notag", "whytag"]
}

鉴于我需要一些具有" oldtag" :2," notag":1," whytag":1,......

但我似乎无法弄明白。我试过用....

"map": "function(doc) {if(doc.type == 'post') { for(var i = 0, l doc.tags.length; i < l; i++) { emit(doc.tags[i], 1); } } }",
"reduce": "_count"

但这只是给了我......

  

{&#34;行&#34;:[   {&#34;键&#34;:空,&#34;值&#34; 20}   ]}

有谁知道怎么做?我很困惑。谢谢。

1 个答案:

答案 0 :(得分:0)

您的视图中包含无效的javascript。

var i = 0; l doc.tags l应该分配给doc.tags.length

参见修正版:

{
  "_id": "_design/tagcount",
  "_rev": "1-d14c9d06e652ad23df1044ffbca9d85f",
  "views": {
    "count": {
      "reduce": "_count",
      "map": "function (doc) {\n  if(doc.type== 'post') { \n    for(var i = 0, l= doc.tags.length; i < l; i++) { emit(doc.tags[i], 1); } } \n}"
    }
  },
  "language": "javascript"
}

此外,您需要指定reduce:

http://localhost:5984/<db>/_design/<design>/_view/<viem>?limit=20&reduce=true&group=true

注意:替换&lt; value&gt;以他们的真实价值。