MongoDB
 Computer >> コンピューター >  >> プログラミング >> MongoDB

MongoDBでソートを使用してドキュメントごとの平均値を計算する方法

MongoDBでドキュメントごとの平均値を計算し、ソートする方法

MongoDBで配列フィールドの平均値を計算するには、集計パイプライン(aggregate)と $avg 演算子を組み合わせて使用します。さらに $addFields ステージで計算結果を新しいフィールドとして追加し、$sort ステージでそのフィールドを基準にドキュメントを並べ替えることができます。

まず、サンプルデータを含むコレクションを作成しましょう。

> db.calculateAverage.insertOne({'Value':[10,20,80]});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e0383e3f5e889d7a51994dc")
}
> db.calculateAverage.insertOne({'Value':[12,15,16]});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e0383edf5e889d7a51994dd")
}
> db.calculateAverage.insertOne({'Value':[30,35,40]});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e0383f5f5e889d7a51994de")
}

作成したドキュメントの確認

find() メソッドを使用して、コレクション内のすべてのドキュメントを表示してみます。

> db.calculateAverage.find().pretty();

実行すると、以下のような出力が得られます。

{
    "_id" : ObjectId("5e0383e3f5e889d7a51994dc"),
    "Value" : [
        10,
        20,
        80
    ]
}
{
    "_id" : ObjectId("5e0383edf5e889d7a51994dd"),
    "Value" : [
        12,
        15,
        16
    ]
}
{
    "_id" : ObjectId("5e0383f5f5e889d7a51994de"),
    "Value" : [
        30,
        35,
        40
    ]
}

ソート付きでドキュメントごとの平均値を計算するクエリ

各ドキュメントの配列「Value」の平均値を計算し、その結果をもとに昇順でソートするクエリは以下の通りです。

> db.calculateAverage.aggregate([ { "$addFields": { "calavg": { "$avg": "$Value" } }}, { "$sort": { "calavg": 1 } } ],function(err, out) { res.send(out) });

このクエリの仕組みは次の通りです。まず $addFields ステージが各ドキュメントに新しいフィールド「calavg」を追加し、$avg 演算子によって配列内の数値の平均値が計算されます。続く $sort ステージが「calavg」の値(1 は昇順を意味します)に従ってドキュメントを並べ替えます。

実行すると、以下のような出力が得られます。

{ "_id" : ObjectId("5e0383edf5e889d7a51994dd"), "Value" : [ 12, 15, 16 ], "calavg" : 14.333333333333334 }
{ "_id" : ObjectId("5e0383f5f5e889d7a51994de"), "Value" : [ 30, 35, 40 ], "calavg" : 35 }
{ "_id" : ObjectId("5e0383e3f5e889d7a51994dc"), "Value" : [ 10, 20, 80 ], "calavg" : 36.666666666666664 }

出力結果を見ると、各ドキュメントに平均値を格納した「calavg」フィールドが追加され、その値が小さい順(14.33 → 35 → 36.67)にドキュメントが並べ替えられていることがわかります。降順でソートしたい場合は、$sort の値を -1 に変更してください。

  1. JavaScriptで配列の平均値を計算する方法

    JavaScriptで配列の平均値を求めるには、配列内のすべての要素を合計し、その合計を配列の長さ(要素数)で割ります。要素の合計を求めるには、forEach()メソッドやreduce()メソッドを使うと簡単に実装できます。コード例<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initia

  2. MongoDBで配列の値を使ってコレクションを並べ替える方法

    MongoDBのコレクションを配列の値を基準にソートしたい場合は、aggregate()メソッドと $sort ステージを組み合わせて使用します。さらに、配列を個々のドキュメントに分解するために $unwind も活用します。 サンプルコレクションの作成 まず、ドキュメントを含むコレクションを作成しましょう。ここでは、学生ごとの詳細情報(名前とスコア)を配列として持つドキュメントを挿入します。 > db.demo577.insertOne( ... { ... student: { ... details: [ ... { .