3

各ドキュメントが次のようなネットワーク サブネットを表すドキュメントのコレクションがあるとします。

{'network':'10.0.0.0/24,'someattr':'aaa'}
{'network':'192.168.0.0/16','someattr':'bbb'}
{'network':'172.16.0.0/16','someattr':'ccc'}

MongoDB コレクションで単一の IP アドレス (例: '10.0.100.50') を検索し、それが属するサブネット/ドキュメントを特定する方法はありますか?

4

1 に答える 1

8

IP は単なるintであり、サブネット マスクは の範囲でintあることに注意してください。人間が (他の理由の中でも) 読み取ることができるように、そのまま表示されます。私なら、MongoDB スキーマに と の 2 つのフィールドを追加しstartAddrますendAddr。それらを s として表すintと、サブネットの開始アドレスと終了アドレスになります。

次に、アプリケーションで IP を に変換できintます。IP を整数に変換する方法については、こちらを参照してください。アプリケーションを作成している言語について言及していないため、ここでは役に立ちません。

最後に、MongoDB に対して次のクエリを実行します。

db.collection.find({startAddr: {$lte: <ip>}, {endAddr: {$gte: <ip>}}})

この新しいスキーマをアプリケーション レベルのコードと組み合わせて、必要に応じてサブネットが重複しているドキュメントを簡単に検索することもできます。

于 2013-08-16T21:15:31.193 に答える