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' ] } } )

ただし、小さなサブセットの場合にのみ正常に見えます。たとえば、ネットマスク /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 に答える