グループ内の平均値
CoddyのNode.jsジャーニー「MongoDBによるデータベース」セクションの一部。レッスン 22/29。
グループは、同じ入力ドキュメントについて複数の集計値を計算できます。グループ化の式は、どのレコードをまとめるかを選び、各アキュムレーターはそれぞれ別の出力フィールドを計算します。
{$group: {
_id: '$team',
players: {$sum: 1},
averageScore: {$avg: '$score'}
}}同じチームの2人のプレイヤーが8点と12点を取った場合、playersは2、averageScoreは10です。引用符で囲まれた'$score'は、入力される各プレイヤーのスコアを読み取ります。同じ考え方を本の出版年にも適用します。出力フィールド名は自由に選べます。フィールド参照は、平均を計算する値を指定します。
チャレンジ
簡単これは小さな練習プロジェクトです。セットアップは用意されています。exercise.jsのみを編集してください。
本をジャンルごとにグループ化し、_id、件数、averageYearを返してください。出力を_idの昇順で並べ替えてください。実行結果:classicの件数は1、averageYearは1815です。scifiの件数は2、averageYearは1972です。
自分で試してみよう
export async function exercise(books) {
return await books
.aggregate([{ $group: { _id: '$genre', count: { $sum: 1 } } }, { $sort: { _id: 1 } }])
.toArray();
}
MongoDBによるデータベースのすべてのレッスン
自分で練習してみよう: Expressプレイグラウンド