1

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

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

我使用 startKey 和 endKey 来指示开始和结束日期,但我找不到如何计算唯一 IP

4

1 回答 1

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

[]"(除非您使用浏览器(它为您完成),否则您需要对 s 进行 url 编码)

于 2012-07-01T21:00:09.540 回答