0

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

{'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。

4

2 回答 2

2

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

伪代码:

db.mycol.find({_id: {$gte: BinData([255,255,0,0]), $lte: BinData([255,255,255,255])}})
于 2012-12-06T14:37:47.467 回答
1

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

蟒蛇代码:

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

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

于 2012-12-06T13:30:27.760 回答