0

MysqlにいくつかのDクラスとCクラスのIPがあるテーブルがあり、このテーブルを使用して、要求IPがデータベースにあるか、次のようなCクラスに属しているかをテストします。

select * from My_Table 
where '192.168.1.12' LIKE CONCAT(ip, '%');

(ここで、192.168.1.12はテーブルに対してテストしているリクエストIPです)

私のデータベースでは、C形式のIP「192.168.1」がある場合、一致するものが得られます。

私はMongoDBの使用を考えていましたが、各IP(CまたはDクラス形式)が_id(デフォルトでインデックス付けされている)であるドキュメントに同じ情報があります。

正規表現が正反対の方法で機能する場合、どうすればMongoDBで機能させることができますか?(事前にCクラスを持っていた場合)

すべてのリクエストIPをCクラスに分割して、次のような正規表現で確認するとします。

db.my_table.find(_id: '^/split_ip/')

結果を繰り返すたびにアプリケーションを再度チェックインする必要がありますが、それは良い解決策ではないと思います。

ですから、何かアドバイスや提案がありますか?

4

1 に答える 1

0

$in 演算子を使用して、1 つのクエリからすべての一致を取得できます。

{ _id: {$in : [/^192.0.1.1/, /^194.1.1/ ] }}

正規表現でオプションを使用している/^ため、インデックスが使用されます。

それは役に立ちますか?

于 2013-01-28T13:40:54.947 に答える