假设我们有一个文档集合,其中每个文档代表一个网络子网,如下所示:
{'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”)并识别它所属的子网/文档?
假设我们有一个文档集合,其中每个文档代表一个网络子网,如下所示:
{'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”)并识别它所属的子网/文档?
请记住,IP 只是int
s 而子网掩码只是 s 的范围int
- 它们按原样显示,以便人们可以阅读它们(以及其他原因)。我要做的是在我的 MongoDB 架构中添加两个额外的字段:startAddr
和endAddr
. 将它们表示为int
s,它们将是您的子网的起始地址和结束地址。
接下来,您可以int
在应用程序中将 IP 转换为 an。有关将 IP 转换为整数的信息,请参阅此处,您没有提及您正在使用哪种语言编写应用程序,因此无法帮助您。
最后,在下面查询 MongoDB
db.collection.find({startAddr: {$lte: <ip>}, {endAddr: {$gte: <ip>}}})
您还可以将此新模式与一些应用程序级代码结合起来,以便在需要时轻松执行诸如查找具有重叠子网的文档之类的操作。