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

【MongoDB】特定のフィールド(キー)を持つドキュメントだけを抽出する$exists演算子の使い方

MongoDBでは、特定のフィールド(キー)を持つドキュメントだけを抽出したいケースがよくあります。たとえば、一部のドキュメントにしか存在しない項目を条件に検索する場合です。そんなときに便利なのが $exists 演算子です。

$exists演算子の基本構文

指定したフィールドが存在するレコードを選択するには、次のような構文を使用します。

db.yourCollectionName.find( { yourFieldName: { $exists : true } } ).pretty();

この構文を実際に確認できるよう、サンプルコレクションを作成してみましょう。

サンプルデータの作成

まず、テスト用のコレクション「selectRecordsHavingKeyDemo」にドキュメントを挿入します。あえて「StudentAge」フィールドを持つドキュメントと持たないドキュメントを混在させています。

> db.selectRecordsHavingKeyDemo.insertOne({"StudentName":"John","StudentAge":21,"StudentMathMarks":78});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c8b7be780f10143d8431e0f")
}
> db.selectRecordsHavingKeyDemo.insertOne({"StudentName":"Carol","StudentMathMarks":89});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c8b7bfc80f10143d8431e10")
}
> db.selectRecordsHavingKeyDemo.insertOne({"StudentName":"Sam","StudentAge":26,"StudentMathMarks":89});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c8b7c1280f10143d8431e11")
}
> db.selectRecordsHavingKeyDemo.insertOne({"StudentName":"Sam","StudentMathMarks":98});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c8b7c2180f10143d8431e12")
}

挿入が完了したら、find()メソッドを使ってコレクション内のすべてのドキュメントを表示して確認しましょう。

> db.selectRecordsHavingKeyDemo.find().pretty();

実行結果は以下のとおりです。4件のうち2件(Carolと2人目のSam)には「StudentAge」フィールドが存在しないことがわかります。

{
    "_id" : ObjectId("5c8b7be780f10143d8431e0f"),
    "StudentName" : "John",
    "StudentAge" : 21,
    "StudentMathMarks" : 78
}
{
    "_id" : ObjectId("5c8b7bfc80f10143d8431e10"),
    "StudentName" : "Carol",
    "StudentMathMarks" : 89
}
{
    "_id" : ObjectId("5c8b7c1280f10143d8431e11"),
    "StudentName" : "Sam",
    "StudentAge" : 26,
    "StudentMathMarks" : 89
}
{
    "_id" : ObjectId("5c8b7c2180f10143d8431e12"),
    "StudentName" : "Sam",
    "StudentMathMarks" : 98
}

特定のキーを持つレコードを選択するクエリ

それでは、「StudentAge」フィールドを持つドキュメントのみを$exists演算子で抽出してみます。ここでは例として「StudentMathMarks」フィールドの存在をチェックしています。

> db.selectRecordsHavingKeyDemo.find( { StudentMathMarks : { $exists : true } } ).pretty();

実行結果は以下のとおりです。

{
    "_id" : ObjectId("5c8b7be780f10143d8431e0f"),
    "StudentName" : "John",
    "StudentAge" : 21,
    "StudentMathMarks" : 78
}
{
    "_id" : ObjectId("5c8b7bfc80f10143d8431e10"),
    "StudentName" : "Carol",
    "StudentMathMarks" : 89
}
{
    "_id" : ObjectId("5c8b7c1280f10143d8431e11"),
    "StudentName" : "Sam",
    "StudentAge" : 26,
    "StudentMathMarks" : 89
}
{
    "_id" : ObjectId("5c8b7c2180f10143d8431e12"),
    "StudentName" : "Sam",
    "StudentMathMarks" : 98
}

すべてのドキュメントが「StudentMathMarks」フィールドを持っているため、4件すべてが結果として返されました。

逆に、キーを持たないレコードを取得するには?

$exists演算子は false を指定することもできます。以下のように書くと、指定したフィールドが存在しないドキュメントだけを抽出できます。

> db.selectRecordsHavingKeyDemo.find( { StudentAge : { $exists : false } } ).pretty();

このクエリを実行すると、「StudentAge」フィールドを持たないCarolとSamの2件のドキュメントが返されます。スキーマが柔軟なMongoDBならではの便利な機能なので、ぜひ活用してみてください。

  1. MySQLで上位10件のレコードを取得するには?LIMIT句の使い方を解説

    MySQLでテーブルから上位10件のレコードを取得したい場合は、LIMIT句を使用します。LIMIT句を使うことで、取得する行数や開始位置を柔軟に指定でき、ページネーション(ページ送り)の実装にも役立ちます。 ここでは、実際にテーブルを作成し、データを挿入して、上位10件を取得する手順を順番に見ていきましょう。 1. テーブルの作成 まず、サンプル用のテーブルを作成します。PageNumberというカラムを持つ「DemoTable」を作成しましょう。 mysql> create table DemoTable -> ( -> PageNumber text -> );

  2. MySQLで下位n件のレコードを取得する方法:ORDER BY DESCとLIMITの使い方

    MySQLでは、ORDER BY句とLIMIT句を組み合わせることで、テーブルから下位n件のレコードを簡単に取得できます。この記事では、実際にサンプルテーブルを作成し、下位n件のレコードを抽出する手順を詳しく解説します。 1. サンプルテーブルの作成 まず、動作確認用のテーブルを作成します。 mysql> create table DemoTable724 (Value int); Query OK, 0 rows affected (0.79 sec) 2. レコードの挿入 次に、insertコマンドを使用してテーブルに複数のレコードを挿入します。 mysql> insert