CouchDB视图,具有重复计数的列表键

qxsslcnc  于 2022-12-09  发布在  CouchDB
关注(0)|答案(1)|浏览(115)

在CouchDB中,我有一个文章集合。每个文章都有一个tags属性。我写了这个map函数来列出数据库中的所有标签

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

但是当它列出所有的标签时,它会显示重复的标签。我只想为每个标签显示一次,并显示每个标签的重复数量,而不是发出相同键的重复行。
如何修改此Map功能?

ki0zmccv

ki0zmccv1#

map函数是可以的,但没有理由发出值1。
无论如何,简单的内置reduce函数_count和正确的查询都可以完成所需的一切。
使用CouchDB需要理解B树,它的Reduce/Reduce文档中有一个很好的概述。我强烈建议你去研究一下这个信息。
下面的代码片段突出了它通过pouchdb的用法。设计文档指定了mapreduce,例如:

{      
  "_id": "_design/SO-72078037",
  "views": {
    "tags": {
      "map": `function (doc) {          
        if(doc.tags) doc.tags.forEach(tag => emit(tag));           
      }`,
      "reduce": "_count",
    }
  }
}

直接的东西。要获得键(标记)计数,查询非常简单:

{
  reduce: true,
  include_docs: false,
  group_level: 1
}

同样,CouchDB文档也很棒-阅读组级查询
第一次

相关问题