これは、.aggregate()
を使用して行うことができます そして主に$unwind
パイプラインオペレーター:
最新のMongoDB3.4以降では、$replaceRoot
と組み合わせて使用できます。
Model.aggregate([
{ "$unwind": "$books" },
{ "$replaceRoot": { "newRoot": "$books" } }
],function(err,results) {
})
以前のバージョンでは、すべてのフィールドを$project
で指定していました :
Model.aggregate([
{ "$unwind": "$books" },
{ "$project": {
"_id": "$books._id",
"pages": "$books.pages",
"title": "$books.title"
}}
],function(err,results) {
})
したがって、$unwind
処理のために配列エントリを分解または「非正規化」するために使用するものです。事実上、これにより、アレイの各メンバーのドキュメント全体のコピーが作成されます。
残りのタスクは、配列に存在するフィールドのみを返すことです。
しかし、それはあまり賢明なことではありません。ドキュメントの配列内に埋め込まれたコンテンツのみを返すことを目的としている場合は、代わりにそのコンテンツを別のコレクションに配置することをお勧めします。
配列からのみそれらのドキュメントを一覧表示するために、集約フレームワークを使用してコレクションからすべてのドキュメントを分離することで、パフォーマンスが大幅に向上します。