0
我有一个CSV〜我在MongoDB中已导入IP和国家代码(从https://db-ip.com)的600K记录的结构如下:通常MongoDB比较I.P.地址
{
addr_type: "ipv4",
ip_start: "176.74.160.0",
ip_end: "176.74.179.207",
country: "GB"
}
在SQL,我会救“ip_start “和‘ip_end’的列VARBINARY(16),然后我可以运行此查询:
select * from `{$table_name}` where addr_type = ? and ip_start <= ? order by ip_start desc limit 1
MongoDB中没有VARBINARY类型,我试图把它们插入字符串,但它并没有回到正确的值:
var country bson.M
ip := "85.134.123.13"
Db := db.MgoDb{}
Db.Init()
c := Db.C("dbip")
if err := c.Find(bson.M{"addr_type": "ipv4", "ip_start": bson.M{"$lte": ip}}).Select(bson.M{"country":1, "_id":0}).Sort("ip_start").One(&country); err != nil {
log.Printf(err.Error())
}
Db.Close()
任何想法如何比较I.P.与MongoDB一样,从上面的SQL例子?
谢谢你的回答,这是否也适用于IPv6?因为我将IPv4和IPv6存储在我的数据库中。 –
我在这里用你说的一个例子,但它打印0. https://play.golang.org/p/KJSMJlUdV- –
我更新了我的答案,实际上没有运行我输入的代码。请参阅https://play.golang.org/p/O7SHmIuwCw –