假设我们有这样的文档集合:
{'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。
答案 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地址所需的子网掩码。