MongoDBでURLレコードから特定のドメイン名を検索する方法
MongoDBに保存されたURLレコードの中から、大文字・小文字を区別せずに特定のドメイン名を検索したいケースはよくあります。そのような場合には、正規表現と /i オプション(大文字小文字を無視するフラグ)を組み合わせて使うのが効果的です。
サンプルコレクションの作成
まず、ドキュメントを含むコレクションを作成しましょう。ここでは demo219 というコレクションに、ウェブサイトのURLを持つドキュメントを挿入します。
> db.demo219.insertOne({"details":{"WebsiteURL":"www.EXAMPLE.com"}});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3e667203d395bdc2134718")
}
> db.demo219.insertOne({"details":{"WebsiteURL":"www.gmail.com"}});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3e667803d395bdc2134719")
}
> db.demo219.insertOne({"details":{"WebsiteURL":"www.example.com"}});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3e667f03d395bdc213471a")
}登録済みドキュメントの確認
find() メソッドを使って、コレクション内のすべてのドキュメントを表示してみます。
> db.demo219.find();
このクエリを実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5e3e667203d395bdc2134718"), "details" : { "WebsiteURL" : "www.EXAMPLE.com" } }
{ "_id" : ObjectId("5e3e667803d395bdc2134719"), "details" : { "WebsiteURL" : "www.gmail.com" } }
{ "_id" : ObjectId("5e3e667f03d395bdc213471a"), "details" : { "WebsiteURL" : "www.example.com" } }ご覧のとおり、「EXAMPLE.com」と「example.com」のように、同じドメインでも大文字・小文字が異なるレコードが混在しています。
特定のドメイン名を検索するクエリ
特定のドメイン名を検索するには、以下のように /example/i という正規表現を使用します。末尾の i フラグにより、大文字・小文字の違いを無視してマッチングが行われます。
> db.demo219.find({"details.WebsiteURL": /example/i});実行結果は次のとおりです。
{ "_id" : ObjectId("5e3e667203d395bdc2134718"), "details" : { "WebsiteURL" : "www.EXAMPLE.com" } }
{ "_id" : ObjectId("5e3e667f03d395bdc213471a"), "details" : { "WebsiteURL" : "www.example.com" } }ポイントまとめ
- ネストされたフィールド(
details.WebsiteURL)も、ドット記法で指定するだけで通常どおり検索できます。 - 正規表現に
/iを付けることで、大文字・小文字を区別しない検索が可能になります。 - 「gmail.com」など別のドメインはマッチしないため、目的のドメインだけを正確に抽出できます。
このように、MongoDBでは正規表現を活用することで、URLフィールドからの柔軟なドメイン検索を簡単に実現できます。大量のデータを扱う場合は、インデックスの利用や前方一致検索(アンカリング)を検討すると、パフォーマンス面でのメリットが大きくなります。
-
MongoDBで$in演算子を使って特定の複数ドキュメントを取得する方法
MongoDBで特定の複数のドキュメントを一度に取得したい場合、$in 演算子を使用します。$in は、指定した配列内のいずれかの値に一致するドキュメントだけを抽出できる便利な比較演算子です。この記事では、実際にコレクションを作成し、$in を使って特定の複数ドキュメントを取得する手順を順番に解説します。1. コレクションの作成とドキュメントの挿入まず、insertOne() メソッドを使ってサンプル用のコレクション「demo593」にドキュメントを挿入します。> db.demo593.insertOne({id:1,Name:Chris});{ acknowledged : tr
-
MongoDBドキュメントから特定の値をフィルタリングする方法
MongoDBドキュメントから特定の値をフィルタリングする方法MongoDBでドキュメント内の配列から特定の値を抽出したい場合は、集計パイプラインで $filter を使用します。この記事では、実際にコレクションを作成し、特定の条件に一致する要素だけをフィルタリングする手順を、サンプルコードとともに解説します。1. サンプルコレクションの作成まず、insertOne() メソッドを使って、配列フィールドを含むドキュメントを持つコレクションを作成します。 db.demo751.insertOne( ... { ... _id: 101, ... details: [