Couchdb计数唯一文档字段

时间:2012-07-01 17:58:44

标签: couchdb

我将访问统计信息存储在couchdb文档中,并希望显示一段时间内唯一IP的计数,我的设计文档是:

{
"unique": {
   "map": "function(doc){ if (doc.type=='stats'){ emit([doc.date], doc.ip); } }"
}

我使用startKey& endKey表示开始和结束日期,但我无法找到如何计算唯一IP

1 个答案:

答案 0 :(得分:0)

获取唯一值的唯一方法是让您希望在密钥中保持唯一的值,并对结果进行分组。

然后要获得计数,你需要创建一个reduce函数(尽管在这种特殊情况下,已经有一个内置到CouchDB中)。

因此,您将视图更改为以下内容:

{
  "unique": {
    "map": "function(doc){if(doc.type=='stats'){emit([doc.date, doc.ip], 1);}}"
    "reduce": "_sum"
}

(请注意,我使用了您的doc.date,它假定这只具有您想要查找唯一IP计数的粒度,并且它将以合理的词汇顺序排序,例如,它具有值像“2012-07-01”这样的东西,而不是像“7/1/2012”这样的值)

然后您可以使用以下内容运行此查询:

http://your.server/your_db/_design/your_views/_view/unique?startkey=["2012-07"]&endkey=["2012-08"]&group=true

(除非你使用浏览器(为你做的),否则你需要对[]"进行网址编码。)