MongoDB网络子网查找

时间:2013-08-16 20:32:26

标签: mongodb

我们假设我们有一组文档,其中每个文档代表一个这样的网络子网:

{'network':'10.0.0.0/24,'someattr':'aaa'}
{'network':'192.168.0.0/16','someattr':'bbb'}
{'network':'172.16.0.0/16','someattr':'ccc'}

有什么方法可以在MongoDB集合中查找单个IP地址(例如' 10.0.100.50')并识别它所属的子网/文档?

1 个答案:

答案 0 :(得分:7)

请记住,IP仅为int,子网掩码只是int s的范围 - 它们按原样显示,以便人们可以读取它们(以及其他原因)。我要做的是在我的MongoDB架构中添加两个额外的字段:startAddrendAddr。将它们表示为int,它们将是您子网的起始和结束地址。

接下来,您可以将IP转换为应用程序中的int。有关将IP转换为整数的信息,请参阅here,您没有提到您正在编写应用程序的语言,因此无法帮助您。

最后,通过以下

查询MongoDB
db.collection.find({startAddr: {$lte: <ip>}, {endAddr: {$gte: <ip>}}})

您还可以将此新架构与某些应用程序级别代码结合使用,以便在需要时轻松执行查找具有重叠子网的文档等内容。

相关问题