在CouchDB中存储和分组IP地址

时间:2012-10-19 13:27:50

标签: couchdb

我有一个Couch数据库,其中包含一堆IP地址文档,如下所示:

{
   "_id": "09eea172ea6537ad0bf58c92e5002199",
   "_rev": "1-67ad27f5ab008ad9644ce8ae003b1ec5",
   "1stOctet": "10",
   "2ndOctet": "1",
   "3rdOctet": "3",
   "4thOctet": "55"
}

文档由多个IP组成,这些IP是不同子网范围的一部分。

我需要一种基于第一,第二,第三和第四个八位字节来减少/分组这些文档的方法,以便生成一个简化的子网列表。

之前有人做过这样的事吗。

最诚挚的问候,

Carlskii

1 个答案:

答案 0 :(得分:0)

我不确定这是否正是您正在寻找的,如果您能提供更多关于您所需输出的示例,我可能会提供更多帮助。

首先,我希望您的文档结构如下所示:(如果您无法更改该结构,那么这不是什么大问题)

{
   "ip": "10.1.3.55"
}

您的地图功能如下:

function (doc) {
    emit(doc.ip.split("."));
}

你需要一个reduce功能,我刚刚在我的测试中使用过它

_count

然后我会使用group_level视图查询参数根据每个八位字节进行分组。

  • 1 =基于第一个八位字节的组
  • 2 =基于第1至第2个八位字节的组
  • 3 =基于第1至第3个八位字节的组
  • 4 =基于整个八位字节的组
在这种情况下,

group=true在功能上与group_level=4

相同