MongoDBでnullまたは空文字列ではないドキュメントを検索するクエリの書き方
MongoDBでnull・空文字列を除外するクエリの基本
MongoDBで「特定のフィールドがnullではなく、かつ空文字列でもない」ドキュメントだけを取得したい場合は、$nin(not in)演算子を使用します。$ninは、指定した配列内のどの値にも一致しないドキュメントを抽出するための演算子です。
基本の構文は以下の通りです。
db.yourCollectionName.find({yourFieldName:{$nin:[null,""]}});このクエリでは、対象フィールドが null のドキュメントと、空文字列 "" のドキュメントの両方が除外され、実際に値が入っているドキュメントのみが結果として返されます。
サンプルコレクションの作成
まず、動作確認用としてドキュメントを含むコレクションを作成します。
> db.notEqualToNullOrEmptyDemo.insertOne({"UserName":"Larry","UserAge":24});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c9d20b6a629b87623db1b26")
}
> db.notEqualToNullOrEmptyDemo.insertOne({"UserName":"","UserAge":29});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c9d20bea629b87623db1b27")
}
> db.notEqualToNullOrEmptyDemo.insertOne({"UserName":"Sam","UserAge":32});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c9d20c7a629b87623db1b28")
}
> db.notEqualToNullOrEmptyDemo.insertOne({"UserName":null,"UserAge":27});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c9d20d2a629b87623db1b29")
}
> db.notEqualToNullOrEmptyDemo.insertOne({"UserName":"Robert","UserAge":26});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c9d20dda629b87623db1b2a")
}
> db.notEqualToNullOrEmptyDemo.insertOne({"UserName":"","UserAge":23});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c9d20e7a629b87623db1b2b")
}このコレクションには、「Larry」「Sam」「Robert」という有効なユーザー名を持つドキュメントと、空文字列やnullが設定されたドキュメントが混在しています。
登録済みドキュメントの全件表示
find()メソッドを使って、コレクション内のすべてのドキュメントを表示してみましょう。
> db.notEqualToNullOrEmptyDemo.find().pretty();
実行すると、以下のような出力が得られます。
{
"_id" : ObjectId("5c9d20b6a629b87623db1b26"),
"UserName" : "Larry",
"UserAge" : 24
}
{
"_id" : ObjectId("5c9d20bea629b87623db1b27"),
"UserName" : "",
"UserAge" : 29
}
{
"_id" : ObjectId("5c9d20c7a629b87623db1b28"),
"UserName" : "Sam",
"UserAge" : 32
}
{
"_id" : ObjectId("5c9d20d2a629b87623db1b29"),
"UserName" : null,
"UserAge" : 27
}
{
"_id" : ObjectId("5c9d20dda629b87623db1b2a"),
"UserName" : "Robert",
"UserAge" : 26
}
{
"_id" : ObjectId("5c9d20e7a629b87623db1b2b"),
"UserName" : "",
"UserAge" : 23
}null・空文字列を除外する条件付きクエリの実行
それでは、「nullまたは空文字列と等しくない」という条件を設定したクエリを実行します。
> db.notEqualToNullOrEmptyDemo.find({UserName:{$nin:[null,""]}}).pretty();実行結果は以下の通りです。
{
"_id" : ObjectId("5c9d20b6a629b87623db1b26"),
"UserName" : "Larry",
"UserAge" : 24
}
{
"_id" : ObjectId("5c9d20c7a629b87623db1b28"),
"UserName" : "Sam",
"UserAge" : 32
}
{
"_id" : ObjectId("5c9d20dda629b87623db1b2a"),
"UserName" : "Robert",
"UserAge" : 26
}ご覧の通り、UserNameが「Larry」「Sam」「Robert」である3件のドキュメントのみが返され、空文字列やnullが設定されたドキュメントは正しく除外されています。このように$nin演算子に [null, ""] を渡すことで、nullと空文字列の両方を一度に除外できるのがポイントです。
-
【MongoDB】idがドキュメント内の配列フィールドの値と一致する場合に除外するクエリの書き方
MongoDBでは、ドキュメントの id フィールドの値が、同一ドキュメント内の配列型フィールド(例: subjectid)に含まれている場合に、そのドキュメントを検索結果から除外したいケースがあります。このような条件を実現するには、 $expr 演算子と組み合わせて $not および $in を使用します。本記事では、サンプルコレクションの作成からクエリの実行、出力結果の確認までを順を追って解説します。 サンプルコレクションの作成 まずは、動作確認用のドキュメントを含むコレクションを作成します。ここでは、 id フィールドと、文字列の配列を持つ subjectid フィールドを備えた2件のド
-
【MySQL】空の値(空文字列)をNULLに変換するUPDATEクエリの書き方
MySQLでは、UPDATE文のSET句とWHERE句を組み合わせるだけで、カラムに入っている空の値(空文字列)をNULLへ簡単に変換できます。ここからは、実際のサンプルを使って手順を詳しく解説していきます。 1. サンプルテーブルを作成する まず、以下のコマンドでテーブルを作成しましょう。 mysql> create table DemoTable1315 -> ( -> CountryName varchar(10) -> ); Query OK, 0 rows affected (0.60 sec) 2. レコードを挿入する 次に、INSERTコマンドでレコー