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