MongoDB
 Computer >> コンピューター >  >> プログラミング >> MongoDB

MongoDBでSQLのEXISTSのようにレコードの存在を確認する方法|findOne()の正しい使い方を解説

SQLのEXISTS相当の処理をMongoDBで実現するには?

リレーショナルデータベース(SQL)では、レコードの存在確認に「EXISTS」句などを使用します。一方、MongoDBで同様の処理を行いたい場合は、findOne()メソッドを使うのが効果的です。

findOne()は、指定した条件に一致するドキュメントの中から最初の1件のみを返すメソッドです。「該当するデータが存在するかどうか」を手軽にチェックできるため、SQLのEXISTS的な用途に適しています。

サンプルコレクションの作成とドキュメントの挿入

まずは動作確認のため、コレクションを作成してドキュメントを登録しましょう。insertOne()を使って、以下のように3件のドキュメントを挿入します。

> db.existsAlternateDemo.insertOne({"StudentName":"Chris"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e06d23f9e4dae213890ac5c")
}
> db.existsAlternateDemo.insertOne({"StudentName":"Chris","StudentAge":21});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e06d2559e4dae213890ac5d")
}
> db.existsAlternateDemo.insertOne({"StudentName":"Chris","StudentAge":22,"StudentCountryName":"US"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e06d2689e4dae213890ac5e")
}

このように、同じ「Chris」という名前でも、フィールドの構成が異なるドキュメントが混在した状態を作りました。これにより、フィールドの有無による存在確認の違いも確認できます。

find()メソッドで全ドキュメントを表示する

登録済みのデータをfind()メソッドで一覧表示してみます。

> db.existsAlternateDemo.find();

上記のクエリを実行すると、次のような結果が出力されます。

{ "_id" : ObjectId("5e06d23f9e4dae213890ac5c"), "StudentName" : "Chris" }
{ "_id" : ObjectId("5e06d2559e4dae213890ac5d"), "StudentName" : "Chris", "StudentAge" : 21 }
{ "_id" : ObjectId("5e06d2689e4dae213890ac5e"), "StudentName" : "Chris", "StudentAge" : 22, "StudentCountryName" : "US" }

findOne()でレコードの存在を確認する

それでは本題である、SQLの「EXISTS」のようにMongoDBで存在チェックを行う方法を見ていきましょう。以下のように、findOne()に検索条件を渡して実行します。

> db.existsAlternateDemo.findOne({"StudentCountryName" : "US"});

このクエリを実行すると、条件に一致した最初の1件だけが返されます。

{
   "_id" : ObjectId("5e06d2689e4dae213890ac5e"),
   "StudentName" : "Chris",
   "StudentAge" : 22,
   "StudentCountryName" : "US"
}

findOne()を使う際のポイント

  • 戻り値は最大1件: 条件に一致するドキュメントが複数存在しても、返されるのは先頭の1件のみです。
  • 存在しない場合はnullが返る: 一致するドキュメントがない場合はnullが返されるため、アプリケーション側のif文などでそのまま存在判定に利用できます。
  • find()との違い: find()はカーソルを返すのに対し、findOne()はドキュメントそのものを返す点も大きな違いです。

このように、MongoDBでSQLのEXISTSのようにレコードの存在を確認したい場合は、findOne()を使うのがシンプルかつ確実な方法です。

  1. ExcelのPI関数の使い方!円周率を使った計算方法を徹底解説

    Microsoft ExcelのPI関数は、数学/三角関数に分類される関数の一つで、円周率(π)の値を返します。書式は =PI() と非常にシンプルで、引数は一切必要ありません。 ExcelでPI関数を使う手順 以下の手順に従って、Microsoft ExcelでPI関数を使用してみましょう。 Microsoft Excelを起動する 新しい表を作成するか、既存のファイルから表を開く 結果を表示したいセルに関数(数式)を入力する Enterキーを押して結果を確認する まず、Microsoft Excelを起動します。 続いて、新しい表を作成するか、保存済みのファイルから既存の表を開きましょ

  2. ExcelのVLOOKUP関数の使い方を徹底解説!基本から応用まで

    大量のデータが入ったExcelスプレッドシートから、特定の情報だけを簡単に抽出したいと思ったことはありませんか?ExcelでVLOOKUPを使いこなせるようになれば、たった一つの強力な関数だけで、こうした検索・抽出作業を実現できます。 VLOOKUP関数は、引数が多く、使い方も複数あるため、多くの人にとってとっつきにくい存在です。この記事では、ExcelにおけるVLOOKUPのあらゆる使い方と、この関数がなぜそれほど強力なのかを、具体例を交えながら詳しく解説します。 ExcelのVLOOKUP関数の引数 Excelの任意のセルに=VLOOKUP(と入力すると、利用可能な引数の一覧がポップ