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

MongoDBの$projectと$concatArraysで既存の多次元配列フィールドを連結する方法

$concatArrays演算子とは

MongoDBの$concatArrays演算子は、複数の配列を連結し、その結果得られた配列を返すために使用されます。本記事では、既存の多次元配列(ネストされた配列)フィールドに対して、集計パイプラインの$projectステージと$reduce演算子を組み合わせて$concatArraysを適用し、配列を平坦化する方法を解説します。

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

まず、ドキュメントを含むコレクションを作成します。次の例では、「Marks1」フィールドに、配列の中にさらに配列が格納された多次元構造のデータを挿入しています。

> db.demo338.insertOne({"Name":"Chris","Marks1":[ [56,67,45],[67,89,90,91]]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e5299baf8647eb59e56209f")
}

登録したドキュメントの確認

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

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

これにより、次のような出力が得られます。

{
   "_id" : ObjectId("5e5299baf8647eb59e56209f"),
   "Name" : "Chris",
   "Marks1" : [
      [
         56,
         67,
         45
      ],
      [
         67,
         89,
         90,
         91
      ]
   ]
}

多次元配列を連結するクエリ

既存の多次元配列フィールドを処理して配列を連結するには、$projectステージ内で$reduce演算子と$concatArrays演算子を組み合わせます。$reduceは入力配列の各要素を先頭から順に処理し、$$thisが現在処理中の要素、$$valueがそれまでの累積結果を表します。各要素を累積結果と連結していくことで、ネストされた配列を1つの配列にまとめられます。

> db.demo338.aggregate([
...    { "$project": {
...       "Marks": {
...          "$reduce": {
...             "input": "$Marks1",
...             "initialValue": [],
...             "in": { "$concatArrays": ["$$this", "$$value"] }
...          }
...       }
... }}
... ])

実行結果

クエリを実行すると、ネストされていた配列が単一のフラットな配列に変換され、以下のような出力が得られます。

{ "_id" : ObjectId("5e5299baf8647eb59e56209f"), "Marks" : [ 67, 89, 90, 91, 56, 67, 45 ] }

このように、$reduce$concatArraysを組み合わせることで、多次元配列を1次元の配列へと簡単に平坦化(フラット化)できます。集計パイプライン内で完結するため、ドキュメントの更新を行わずに読み取り時のデータ形式だけを変えたい場合にも便利です。

  1. MongoDBのAggregationで$matchと$andを使って複数の値を照合する方法

    MongoDBのAggregationで$matchと$andを使って複数の値を照合する方法 MongoDBで複数の条件の「すべて」に一致するドキュメントを抽出したい場合には、Aggregationパイプラインの$matchステージと$and演算子を組み合わせます。本記事では、ネストされたドキュメント構造を持つコレクションを例に、実際のコードを通して具体的な手順を解説します。 1. サンプルコレクションの作成 まず、insertOne()メソッドを使って、ネストした構造を持つドキュメントを1件挿入し、テスト用のコレクションを作成します。 > db.demo574.insertOne( .

  2. 既存のMongoDBドキュメントにリストやオブジェクト型のフィールドを追加する方法

    既存のMongoDBドキュメントに、オブジェクト型や配列(リスト)型など特定のデータ型を持つ新しいフィールドを追加したい場合、$set 演算子を使用します。$set は指定したフィールドが存在しない場合は新しく作成し、すでに存在する場合は値を更新してくれるため、フィールドの追加にも最適です。1. コレクションとドキュメントの作成まず、insertOne() メソッドを使ってサンプルのコレクションを作成します。> db.demo732.insertOne({_id:1,Language:"English"}); { "acknowledged" :