$addFields
1. $addFields ステージの概要
このアグリゲーションステージは、ドキュメントに新しいフィールドを追加するために使用されます。既存のフィールドの値を基に計算を行ったり、静的な値を割り当てたりして、ドキュメントの構造を動的に拡張することが可能です。
2. $addFields の活用例
以下の例では、「アグリゲーション入門」セクションでロードしたサンプルデータセットの中から、sample_restaurants データベースを使用します。
2.1 コード例:平均スコアの算出とフィールド追加
ここでは、各レストランの grades.score(評価スコア)の平均値を計算し、新しく avgGrade というフィールドとしてドキュメントに追加します。
db.restaurants.aggregate([
{
// ステージ 1: 新しいフィールド "avgGrade" を追加
$addFields: {
avgGrade: { $avg: "$grades.score" }
}
},
{
// ステージ 2: レストラン名と、計算した平均スコアのみを表示
$project: {
"name": 1,
"avgGrade": 1
}
},
{
// ステージ 3: 結果を 5 件に制限
$limit: 5
}
])2.2 実行結果の解説
このクエリを実行すると、元のドキュメントに加えて、各レストランの grades.score の平均値が格納された avgGrade フィールドを含むドキュメントが返されます。