MongoDB和IP子网

时间:2012-12-06 13:23:43

标签: mongodb pymongo

假设我们有这样的文档集合:

{'ip':'10.1.1.1','someattr':'aaa'}
{'ip':'120.14.15.16','someattr':'bbb'}
{'ip':'212.12.12.12','someattr':'ccc'}

我想查找 ip 在某个IP子网中的所有文档。 我使用python并可以将子网转换为数组并运行类似

的内容
coll.find( { 'ip': { '$in': [ '10.1.1.0', '10.1.1.1', '10.1.1.2' ] } } )

但它只对小的子集看起来正常,例如netmask / 20将有4094。

2 个答案:

答案 0 :(得分:2)

您还可以使用$ gt / $ lt范围为该查询和查询使用二进制密钥。应该比正则表达式版本更有效率。

伪代码:

db.mycol.find({_id: {$gte: BinData([255,255,0,0]), $lte: BinData([255,255,255,255])}})

答案 1 :(得分:1)

正则表达式会帮助你吗? mongodb支持正则表达式:

python代码:

regx = re.compile('10.*', re.IGNORECASE)
coll.find( { 'ip': regex } )

应该找到以“10”开头的所有ips - 你应该能够将其转换为ip地址所需的子网掩码。