MongoDB で ドキュメント内の配列 を展開する 方法

0 件のコメント

今回は「MongoDB でドキュメント内の配列を展開する方法」についてまとめます。

MongoDBはドキュメントを保存するデータベースなので、そのドキュメントに配列が含まれることもあります。 今回はその配列を展開する方法についてまとめます。

サンプルデータ

以下のサンプルデータが入っている環境でのサンプルコードおよび実行結果を見ていきます。

1
2
3
4
5
> db.fruits.insertMany([
  { name: "shirt-A", size: ["S", "M", "L"] },
  { name: "shirt-B", size: ["Free"] },
  { name: "shirt-C", size: ["S"] }
]);

aggregate( $unwind )

ドキュメント内の配列を展開するには aggregate() の $unwind オペレーター を使うことで実現できます。 以下では上記サンプルデータの size フィールドを展開する方法を記載します。

コード

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
var MongoClient = require("mongodb").MongoClient;
 
MongoClient.connect(URL, (err, client) => {
  if (err) {
    client.close();
    return;
  }
 
  var db = client.db("test");
 
  db.collection("fruits")
    .aggregate([
      { $unwind: "$size" },
      { $project: { _id: 0 } }
    ]).toArray()
    .then((docs) => {
      console.log(docs);
    }).catch((err) => {
      console.log(err);
    }).then(() => {
      client.close();
    });
});

実行 & 結果

1
2
3
4
5
[ { name: 'shirt-A', size: 'S' },
  { name: 'shirt-A', size: 'M' },
  { name: 'shirt-A', size: 'L' },
  { name: 'shirt-B', size: 'Free' },
  { name: 'shirt-C', size: 'S' } ]

$unwind 単体で使うことはあまりないような気がします。 集計を行う中でどうしても展開しないと集計できないようなケースのとき、$unwind で平面展開してその結果を $group で集計するような使い方になると思います。

今回は「MongoDB でドキュメント内の配列を展開する方法」についてまとめました。 参考になったでしょうか? 本記事がお役に立っていると嬉しいです!!

最後に… このブログに興味を持っていただけた方は、 ぜひ 「Facebookページ に いいね!」または 「Twitter の フォロー」 お願いします!!