3

假设我们有一个文档集合,其中每个文档代表一个网络子网,如下所示:

{'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”)并识别它所属的子网/文档?

4

1 回答 1

8

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

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

最后,在下面查询 MongoDB

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

您还可以将此新模式与一些应用程序级代码结合起来,以便在需要时轻松执行诸如查找具有重叠子网的文档之类的操作。

于 2013-08-16T21:15:31.193 回答