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

MongoDBでドキュメントの配列をマージする方法|aggregate()と$pushの使い方

MongoDBで複数のドキュメントが持つ配列フィールドを1つにまとめたい場合、aggregate()メソッドと$push演算子を組み合わせるのが基本的なアプローチです。この記事では、実際のコード例を使いながら手順をわかりやすく解説します。

1. サンプルコレクションの作成

まず、動作確認用のコレクションを作成し、ドキュメントを挿入します。

> db.demo64.insertOne({"Subjects":["MySQL","MongoDB","Java"]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e28762bcfb11e5c34d89936")
}
> db.demo64.insertOne({"Subjects":["Oracle","Spring","Python"]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e28763fcfb11e5c34d89937")
}

2. 挿入したドキュメントの確認

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

> db.demo64.find();

実行すると、以下のような出力が得られます。

{ "_id" : ObjectId("5e28762bcfb11e5c34d89936"), "Subjects" : [ "MySQL", "MongoDB", "Java" ] }
{ "_id" : ObjectId("5e28763fcfb11e5c34d89937"), "Subjects" : [ "Oracle", "Spring", "Python" ] }

3. 配列をマージする集計クエリ

MongoDBでドキュメントの配列をマージするには、次のような集計パイプラインを使用します。

> db.demo64.aggregate([
... { "$group": {
...    "_id": null,
...    "Subjects": { "$push": "$Subjects" }
... }},
... { "$project": { "_id": 0 }}
... ]);

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

{ "Subjects" : [ [ "MySQL", "MongoDB", "Java" ], [ "Oracle", "Spring", "Python" ] ] }

クエリのポイント解説

  • $groupステージ_idnullを指定することで、コレクション内のすべてのドキュメントが1つのグループにまとめられます。
  • $push演算子:各ドキュメントのSubjectsフィールドの値を、グループごとの配列に順番に追加していきます。
  • $projectステージ_id: 0を指定して、出力結果から不要な_idフィールドを除外しています。

補足:ネストした配列をフラット化したい場合

上記の方法では、結果が「配列の中に配列が入った」ネスト構造になります。すべての要素を1つのフラットな配列にまとめたい場合は、$unwindで展開してから$pushするか、$reduce$concatArraysを組み合わせることで実現できます。用途に応じて使い分けるとよいでしょう。

  1. Microsoft Wordで2つのドキュメントを結合(マージ)する方法

    同僚や編集者とWord文書で共同作業をしていると、コピー・編集・修正のバージョンがあっという間に増えて手に負えなくなることがあります。そんなとき役立つのが、Wordで2つの別々の文書を結合する機能です。単にファイルをマージできるだけでなく、どの変更を誰が・いつ行ったのかを記録として残せる点が大きな魅力です。 この記事では、Microsoft Wordで2つの文書を簡単に結合する方法を詳しく解説します。 2つの文書を結合する手順 まず、メインとなる最初の文書を開きます。続いて上部のツールバーにある「校閲」タブをクリックし、「比較」ボタンを探してください。 ドロップダウンメニューから「文書の

  2. LinuxでPDFファイルを結合する方法 – pdftkコマンドの使い方を解説

    複数のPDFドキュメントを1つのファイルにまとめたい——これは多くのユーザーにとってごく一般的なニーズです。では、Linux上でそれを実現するにはどうすればよいのでしょうか?この記事では、そのために必要なツールと、タスクを完了するための非常にシンプルなコマンドを紹介します。 主役は「pdftk」 pdftkは、単なるドキュメント結合ツールではありません。自らを「電子ホッチキス外し・パンチ・製本器・暗号解読リング・X線メガネ」と称するほど多機能なツールです。具体的には、PDFドキュメントの結合や分割、ファイルの暗号化・復号化、PDFフォームへの入力、背景ウォーターマーク(透かし)の追加、PDFメ