我将访问统计信息存储在 couchdb 文档中,并希望在一段时间内显示唯一 IP 的计数,我的设计文档是:
{
"unique": {
"map": "function(doc){ if (doc.type=='stats'){ emit([doc.date], doc.ip); } }"
}
我使用 startKey 和 endKey 来指示开始和结束日期,但我找不到如何计算唯一 IP
我将访问统计信息存储在 couchdb 文档中,并希望在一段时间内显示唯一 IP 的计数,我的设计文档是:
{
"unique": {
"map": "function(doc){ if (doc.type=='stats'){ emit([doc.date], doc.ip); } }"
}
我使用 startKey 和 endKey 来指示开始和结束日期,但我找不到如何计算唯一 IP
获得唯一值的唯一方法是在键中设置您希望唯一的值,并对结果进行分组。
然后要获得计数,您需要创建一个 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 编码)