MongoDBで条件に一致するドキュメントの値を配列として取得する方法
MongoDBで、指定した条件に一致するドキュメントから特定フィールドの値を配列として取得したい場合は、distinct()メソッドを使用します。distinct()は、単一のコレクションまたはビュー全体から、指定されたフィールドの一意な値を検索し、その結果を配列形式で返してくれる便利なメソッドです。
コレクションの作成
まず、ドキュメントを含むコレクションを作成しましょう。
> db.projectionListDemo.insertOne({"_id":"1","Subject":["MongoDB","MySQL","Java"]});
{ "acknowledged" : true, "insertedId" : "1" }
> db.projectionListDemo.insertOne({"_id":"2","Subject":["MongoDB","C","C++"]});
{ "acknowledged" : true, "insertedId" : "2" }
> db.projectionListDemo.insertOne({"_id":"3","Subject":["Java","Python"]});
{ "acknowledged" : true, "insertedId" : "3" }すべてのドキュメントを表示する
find()メソッドを使って、コレクション内のすべてのドキュメントを確認してみます。
> db.projectionListDemo.find().pretty();
出力結果
{ "_id" : "1", "Subject" : [ "MongoDB", "MySQL", "Java" ] }
{ "_id" : "2", "Subject" : [ "MongoDB", "C", "C++" ] }
{ "_id" : "3", "Subject" : [ "Java", "Python" ] }選択した項目を配列として取得する
それでは、「MongoDB」という科目(Subject)を含むドキュメントの_idを配列として取得してみましょう。distinct()の第1引数には取得したいフィールド名を、第2引数には検索条件(クエリ)を指定します。
> db.projectionListDemo.distinct('_id', {'Subject' : 'MongoDB'});出力結果
[ "1", "2" ]
このように、Subjectフィールドに「MongoDB」が含まれるドキュメント(_idが「1」と「2」)のみが抽出され、その_idの値が配列形式で返されました。
この手法は、集計パイプライン($groupなど)を記述せずに、シンプルに一意な値のリストを取得したい場合に非常に便利です。条件に一致するドキュメントIDの一覧や、カテゴリの一覧などを手軽に配列として扱いたい場面で活用できます。
-
MongoDBのオブジェクト配列からアイテムを取得する方法
MongoDBでオブジェクト配列からアイテムを取得するには?MongoDBのドキュメント内にネストされたオブジェクト配列から特定のアイテムを取り出したい場合は、aggregate()メソッドを使用します。集計パイプラインの各ステージを組み合わせることで、配列の展開・絞り込み・集約を柔軟に行えます。まずは、サンプルコレクションにドキュメントを作成してみましょう。> db.demo459.insertOne( ... { _id : 1, ... Information : [ ... { ... Name : Chris, ... _id : new O
-
MongoDBでサブドキュメント内の配列に含まれる_idと一致するドキュメントを照会する方法
MongoDBでは、あるコレクションのサブドキュメント内にある配列の値(idなど)を取得し、その値を使って別のコレクションの_idと一致するドキュメントを照会できます。この記事では、$in演算子とdistinct()メソッドを組み合わせた実践的な方法を解説します。 1. 基準となるコレクションを作成する まず、照合条件となる_idのリストを持つコレクションを作成します。ここでは、サブドキュメントの配列を含むドキュメントを挿入します。 > db.demo568.insertOne({ _id: 101, details: [ {id : 101 }, { id:103 } ] }); {