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

MongoDBで選択したアイテムの配列としてプロジェクション結果を取得する方法

MongoDBで特定の値を含むドキュメントの_idを配列として取得する

この記事では、MongoDBにおいて、配列型フィールドに特定の値が含まれているドキュメントの _id を、配列形式で効率的に取得する方法を解説します。ポイントとなるのは distinct() メソッドの活用です。

1. コレクションとドキュメントの作成

まず、サンプル用のコレクションを作成して、ドキュメントを挿入します。

> db.demo151.insertOne({"ListOfNames":["Chris","David","Mike"]});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e3513b6fdf09dd6d08539da")
}
> db.demo151.insertOne({"ListOfNames":["Mike","Bob"]});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e3513c4fdf09dd6d08539db")
}
> db.demo151.insertOne({"ListOfNames":["John","David","Chris"]});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e3513dcfdf09dd6d08539dc")
}

2. コレクション内のすべてのドキュメントを表示

find() メソッドを使って、コレクション内のすべてのドキュメントを確認します。

> db.demo151.find();

このコマンドを実行すると、以下のような出力が得られます。

{ "_id" : ObjectId("5e3513b6fdf09dd6d08539da"), "ListOfNames" : [ "Chris", "David", "Mike" ] }
{ "_id" : ObjectId("5e3513c4fdf09dd6d08539db"), "ListOfNames" : [ "Mike", "Bob" ] }
{ "_id" : ObjectId("5e3513dcfdf09dd6d08539dc"), "ListOfNames" : [ "John", "David", "Chris" ] }

3. 選択したアイテムの配列として結果を取得するクエリ

「ListOfNames」フィールドに「Mike」という値が含まれるドキュメントの _id を配列として取得するには、以下のように distinct() メソッドを使用します。

> db.demo151.distinct('_id', {'ListOfNames' : "Mike"});

このクエリを実行すると、次のような出力になります。

[
    ObjectId("5e3513b6fdf09dd6d08539da"),
    ObjectId("5e3513c4fdf09dd6d08539db")
]

まとめ

distinct() メソッドは、第一引数に取得したいフィールド名、第二引数に検索条件(クエリ)を指定することで、条件に一致するドキュメントから重複のない値を配列として返します。今回の例のように、配列型フィールドに対して部分一致の条件を指定しても正しく動作するため、「特定の要素を含むドキュメントのID一覧が欲しい」といったケースで非常に便利です。

なお、より複雑な集計が必要な場合は aggregate() フレームワークの $match$project ステージを組み合わせることで、柔軟なデータ整形も可能です。

  1. MongoDBでIDを使ってコレクションのドキュメントを照合する方法

    MongoDBでIDを使ってコレクションのドキュメントを照合する方法MongoDBでコレクション内のアイテムをIDで照合するには、$in 演算子を使用します。本記事では、実際のコード例を通じて、複数のObjectIdに一致するドキュメントを効率的に取得する手順を解説します。1. サンプルコレクションの作成まず、ドキュメントを含むコレクションを作成しましょう。以下では demo528 というコレクションに3件のドキュメントを挿入しています。> db.demo528.insertOne({"Name":"Chris",Age:21});{ &

  2. MongoDBで配列の要素数をカウントし、新しいフィールドに表示する方法

    ドキュメント内の配列要素の数をカウントするには、MongoDBの $size 演算子を使用します。$size は集計パイプライン(aggregate)の中で利用でき、指定した配列フィールドに含まれる要素の総数を数値として返します。ここでは、実際にコレクションを作成しながら、配列要素数をカウントして新しいフィールドに表示する手順を解説します。1. コレクションの作成まず、ドキュメントを挿入してコレクションを作成します。各ドキュメントには科目名を格納する配列フィールド「ListOfSubject」を持たせます。> db.demo703.insertOne({ListOfSubject:[My