Menu
CoddyTech

グループ内の平均値

CoddyのNode.jsジャーニー「MongoDBによるデータベース」セクションの一部。レッスン 22/29。

グループは、同じ入力ドキュメントについて複数の集計値を計算できます。グループ化の式は、どのレコードをまとめるかを選び、各アキュムレーターはそれぞれ別の出力フィールドを計算します。

{$group: {
    _id: '$team',
    players: {$sum: 1},
    averageScore: {$avg: '$score'}
}}

同じチームの2人のプレイヤーが8点と12点を取った場合、playersは2、averageScoreは10です。引用符で囲まれた'$score'は、入力される各プレイヤーのスコアを読み取ります。同じ考え方を本の出版年にも適用します。出力フィールド名は自由に選べます。フィールド参照は、平均を計算する値を指定します。

challenge icon

チャレンジ

簡単

これは小さな練習プロジェクトです。セットアップは用意されています。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プレイグラウンド