MongoDBで「NOT LIKE」を実現する方法|$not演算子と正規表現の使い方
MongoDBには、SQLにあるような「NOT LIKE」演算子は用意されていません。しかし、$not演算子と正規表現を組み合わせることで、同じ条件指定を簡単に実現できます。
この記事では、実際にコレクションを作成しながら、$not演算子の使い方を具体的に解説します。
1. サンプルコレクションの作成
まずは動作確認のためのコレクションを作成します。以下のクエリで、学生名(StudentName)を含むドキュメントを5件挿入します。
> db.notLikeOperatorDemo.insertOne({"StudentName":"John Doe"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c8a29c393b406bd3df60dfc")
}
> db.notLikeOperatorDemo.insertOne({"StudentName":"John Smith"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c8a29cc93b406bd3df60dfd")
}
> db.notLikeOperatorDemo.insertOne({"StudentName":"John Taylor"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c8a29df93b406bd3df60dfe")
}
> db.notLikeOperatorDemo.insertOne({"StudentName":"Carol Taylor"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c8a2a1693b406bd3df60dff")
}
> db.notLikeOperatorDemo.insertOne({"StudentName":"David Miller"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c8a2a2693b406bd3df60e00")
}2. 登録したドキュメントの確認
find()メソッドを使って、コレクション内のすべてのドキュメントを表示してみましょう。
> db.notLikeOperatorDemo.find().pretty();
実行結果は以下の通りです。
{ "_id" : ObjectId("5c8a29c393b406bd3df60dfc"), "StudentName" : "John Doe" }
{
"_id" : ObjectId("5c8a29cc93b406bd3df60dfd"),
"StudentName" : "John Smith"
}
{
"_id" : ObjectId("5c8a29df93b406bd3df60dfe"),
"StudentName" : "John Taylor"
}
{
"_id" : ObjectId("5c8a2a1693b406bd3df60dff"),
"StudentName" : "Carol Taylor"
}
{
"_id" : ObjectId("5c8a2a2693b406bd3df60e00"),
"StudentName" : "David Miller"
}3. $not演算子で「NOT LIKE」を実現する
ここからが本題です。「John Taylor」という名前を含まないドキュメントだけを抽出したい場合、次のように$not演算子に正規表現を渡します。
> db.notLikeOperatorDemo.find( { StudentName: { $not: /^John Taylor.*/ } } );実行結果を見ると、「John Taylor」以外の4件が取得できていることがわかります。
{ "_id" : ObjectId("5c8a29c393b406bd3df60dfc"), "StudentName" : "John Doe" }
{ "_id" : ObjectId("5c8a29cc93b406bd3df60dfd"), "StudentName" : "John Smith" }
{ "_id" : ObjectId("5c8a2a1693b406bd3df60dff"), "StudentName" : "Carol Taylor" }
{ "_id" : ObjectId("5c8a2a2693b406bd3df60e00"), "StudentName" : "David Miller" }別の正規表現パターンの例
先頭一致ではなく、文字列の中間一致でも同様に除外できます。次のクエリでも同じ結果になります。
> db.notLikeOperatorDemo.find({StudentName: {$not: /John Taylor/}});実行結果:
{ "_id" : ObjectId("5c8a29c393b406bd3df60dfc"), "StudentName" : "John Doe" }
{ "_id" : ObjectId("5c8a29cc93b406bd3df60dfd"), "StudentName" : "John Smith" }
{ "_id" : ObjectId("5c8a2a1693b406bd3df60dff"), "StudentName" : "Carol Taylor" }
{ "_id" : ObjectId("5c8a2a2693b406bd3df60e00"), "StudentName" : "David Miller" }まとめ
MongoDBで「特定の文字列を含まない」レコードを検索したい場合は、$not演算子に正規表現を組み合わせるのが基本のアプローチです。/^John Taylor.*/のように先頭一致のパターンでも、/John Taylor/のように部分一致のパターンでも柔軟に対応できます。SQLのNOT LIKEに慣れている方も、この方法を覚えておけばMongoDBでも違和感なく条件検索が行えるでしょう。
-
C#の「is」演算子の使い方をわかりやすく解説
C#の「is」演算子は、オブジェクトの実行時の型が指定された型と互換性があるかどうかを判定するために使用します。型チェックやキャスト前の安全性確認など、さまざまな場面で活用される重要な演算子です。構文「is」演算子の基本的な構文は次のとおりです。expr is typeここで、expr は判定対象となる式、type は比較対象となる型の名前を表します。式の結果が指定した型と互換性がある場合は true を返し、そうでない場合は false を返します。使用例以下は、「is」演算子を使ってオブジェクトの型を判定するサンプルプログラムです。using System; class One { } c
-
C#の「as」演算子の使い方を徹底解説!型変換の基本とサンプルコード
C#における「as」演算子は、互換性のある型同士の変換を行うための演算子です。キャスト操作に似ていますが、実行できるのは参照変換、null許容変換、ボックス化変換のみという特徴があります。ユーザー定義の変換など、それ以外の変換は「as」では行えず、その場合は通常のキャスト式を使用する必要があります。as演算子の基本構文「as」演算子は次のように記述します。ここでは、object型の値をstring型へ変換しています。string s = obj[i] as string;変換に成功した場合はその結果が返され、失敗した場合には例外をスローする代わりにnullが返される点が、明示的なキャストとの大