今回は「MongoDB でドキュメント内の配列を展開する方法」についてまとめます。
MongoDBはドキュメントを保存するデータベースなので、そのドキュメントに配列が含まれることもあります。 今回はその配列を展開する方法についてまとめます。
サンプルデータ
以下のサンプルデータが入っている環境でのサンプルコードおよび実行結果を見ていきます。
> 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 フィールドを展開する方法を記載します。
コード
var MongoClient = require("mongodb").MongoClient; var URL = "mongodb://localhost:27017"; 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(); }); });
実行 & 結果
[ { 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 の フォロー」 お願いします!!