针对IPV6的MongoDB网络子网查找

时间:2018-03-19 10:30:43

标签: java mongodb

我有一组文档,其中每个文档代表IPV6的网络子网,如下所示,

  • 2001:0D38:ABCD:0012 :: 0/64

如何识别给定地址(2001:0D38:ABCD:0012:0:0:0:1)是否属于mongodb中配置的子网?

由于mongo db不支持大整数数据类型,我无法将IPV6地址转换为整数并像IPV4一样存储在DB中。

1 个答案:

答案 0 :(得分:0)

如果您可以将文档中子网的最小和最大地址存储为十进制字符串,例如:

{
    mask: '2001:0D38:ABCD:0012::0/64',
    minIP: '42540756323247557835581172037552439296',
    maxIP: '42540756323247557854027916111261990911'
}

查找包含IP' 2001:0D38:ABCD:0012:0:0:0:1'的所有文档的查询就像

一样简单
db.collection.find({
    minIP: {$lte: '42540756323247557835581172037552439297'}, 
    maxIP: {$gte: '42540756323247557835581172037552439297'}
})