今回は「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 の フォロー」 お願いします!!