假设我们有一个文档集合,其中每个文档都表示一个网络子网,如下所示:
{'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转换为。有关将IP转换为整数的信息,请参见此处。您没有提到您在编写应用程序时所用的语言,因此在此无济于事。
最后,查询以下内容的MongoDB
db.collection.find({startAddr: {$lte: <ip>}, {endAddr: {$gte: <ip>}}})
您还可以将此新模式与一些应用程序级代码结合起来,轻松地执行诸如查找具有重叠子网的文档之类的操作(如果需要)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句