MongoDBで片方のフィールドがnullの場合にもう一方のフィールドを選択する方法
MongoDBで、片方のフィールドがnullの場合にもう一方のフィールドの値を取得したいときは、集計パイプラインの演算子「$ifNull」を使用します。$ifNullは、指定した式がnullまたは存在しない場合に、代替の値を返してくれる便利な演算子です。
まず、サンプル用のコレクションにドキュメントを作成してみましょう。
> db.demo182.insertOne({"FirstName":"Chris","LastName":null});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e398ea19e4f06af55199802")
}
> db.demo182.insertOne({"FirstName":null,"LastName":"Miller"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e398ead9e4f06af55199803")
}
>
> db.demo182.insertOne({"FirstName":"John","LastName":"Smith"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e398ebf9e4f06af55199804")
}コレクション内の全ドキュメントを表示する
find()メソッドを使って、コレクション内のすべてのドキュメントを表示します。
> db.demo182.find();
上記のクエリを実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5e398ea19e4f06af55199802"), "FirstName" : "Chris", "LastName" : null }
{ "_id" : ObjectId("5e398ead9e4f06af55199803"), "FirstName" : null, "LastName" : "Miller" }
{ "_id" : ObjectId("5e398ebf9e4f06af55199804"), "FirstName" : "John", "LastName" : "Smith" }$ifNullを使ってnullの場合に別のフィールドを選択する
片方のフィールドがnullの場合にもう一方のフィールドを選択するには、以下のようなクエリを実行します。
> db.demo182.aggregate([
... {
... $project: {
... "item": 1,
... "Result": { "$ifNull": [ "$FirstName", "$LastName" ] }
... }
... }
...])このクエリでは、$projectステージ内で$ifNullを使用し、FirstNameがnullの場合はLastNameの値を、そうでなければFirstNameの値を「Result」として出力しています。
実行すると、次のような結果が得られます。
{ "_id" : ObjectId("5e398ea19e4f06af55199802"), "Result" : "Chris" }
{ "_id" : ObjectId("5e398ead9e4f06af55199803"), "Result" : "Miller" }
{ "_id" : ObjectId("5e398ebf9e4f06af55199804"), "Result" : "John" }$ifNullの動作のポイント
$ifNullは配列として2つ以上の引数を受け取ります。最初の引数がnullでなければその値を返し、nullの場合は2番目の引数の値を返します。3つ以上の引数を指定した場合は、nullでない最初の値が返されます。さらに、すべての引数がnullだった場合に備えて、最後の引数に固定値(デフォルト値)を指定することもできます。これにより、null値を含むフィールドを柔軟に処理できます。
-
【MongoDB】ネストされた(入れ子構造の)ドキュメントを更新するクエリの書き方
MongoDBでは、入れ子(ネスト)になったサブドキュメントのフィールドを更新する際、update()メソッドとドット表記(dot notation)を組み合わせて使用します。ドット表記を使うことで、深い階層にあるフィールドを直接指定して値を変更できます。1. サンプルコレクションの作成まず、ネストされたドキュメントを含むコレクションを作成しましょう。以下のコマンドでdemo607というコレクションにドキュメントを挿入します。> db.demo607.insertOne( ... { ... id: 1, ... Info1 : { ...
-
MongoDBでフィールド値に含まれる「@email」のような文字列を検索する方法
MongoDBのfind()メソッドを使えば、正規表現(Regex)を活用して、フィールド値の中から特定の文字列を柔軟に検索できます。本記事では、「@email」という文字列を含むドキュメントを検索する方法を、実際のコード例とともに解説します。1. 検索用コレクションの作成まずは、メールアドレスを格納したドキュメントを持つコレクションを作成しましょう。> db.demo727.insertOne({UserId:John@email.com}); { acknowledged : true, insertedId : ObjectId(5eab375f4341781127