【问题标题】:count number of tags in a couchdb document计算 couchdb 文档中的标签数
【发布时间】:2017-06-12 17:50:13
【问题描述】:

我有一个类似这样的简单文档设计...

{
  _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"

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

{“行”:[ {“键”:空,“值”:20} ]}

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

【问题讨论】:

    标签: javascript mapreduce couchdb


    【解决方案1】:

    您的视图中有无效的 javascript。

    变量 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/&lt;db&gt;/_design/&lt;design&gt;/_view/&lt;viem&gt;?limit=20&amp;reduce=true&amp;group=true

    注意:将 替换为其实际值。

    【讨论】:

    • 有没有办法让他们按订单退货?让使用较多的“标签”先返回?
    • 其实在map和reduce中排序只是key。除了内存排序,你可以试试 Mango Query。
    猜你喜欢
    • 2017-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    • 2012-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多