MongoDB比较IP地址

MongoDB比较IP地址,mongodb,Mongodb,我在mongoDB中导入的I.p.s和国家代码(来源)的csv约为600k,结构如下: { addr_type: "ipv4", ip_start: "176.74.160.0", ip_end: "176.74.179.207", country: "GB" } 通常在SQL中,我会将“ip_开始”和“ip_结束”列保存为VARBINARY(16),然后我可以运行以下查询: select * from `{$table_name}` where addr_ty

我在mongoDB中导入的I.p.s和国家代码(来源)的csv约为600k,结构如下:

{
    addr_type: "ipv4",
    ip_start: "176.74.160.0",
    ip_end: "176.74.179.207",
    country: "GB"
}
通常在SQL中,我会将“ip_开始”和“ip_结束”列保存为VARBINARY(16),然后我可以运行以下查询:

select * from `{$table_name}` where addr_type = ? and ip_start <= ? order by ip_start desc limit 1

你知道如何将上面的SQL示例中的I.p.与MongoDB进行比较吗?

我会将IP地址视为32位整数(假设为IPv4)。你可以很容易地转换使用。例如:

binary.BigEndian.Uint32(net.ParseIP("85.134.123.13").To4())
一旦这些被存储为整数,那么在查询中查找特定IP就是一个简单的数字比较


否则,您可以使用
net.ParseIP
生成
[]字节
片段,将它们存储为二进制,并像在SQL中那样进行比较。结果字节片的长度始终为16字节,因此,如果解析IPv4地址,则仅使用最后4个字节。

我将IP地址视为32位整数(假设为IPv4)。你可以很容易地转换使用。例如:

binary.BigEndian.Uint32(net.ParseIP("85.134.123.13").To4())
一旦这些被存储为整数,那么在查询中查找特定IP就是一个简单的数字比较


否则,您可以使用
net.ParseIP
生成
[]字节
片段,将它们存储为二进制,并像在SQL中那样进行比较。结果字节片的长度始终为16字节,因此,如果解析IPv4地址,则仅使用最后4个字节。

谢谢您的回答,这也适用于IPv6吗?因为我在数据库中同时存储IPv4和IPv6。我在这里用您所说的做了一个示例,但它打印了0。我更新了我的答案,但实际上没有运行我键入的代码。请参阅“谢谢”以获得答案,这是否也适用于IPv6?因为我在数据库中同时存储IPv4和IPv6。我在这里用您所说的做了一个示例,但它打印了0。我更新了我的答案,但实际上没有运行我键入的代码。看见