MongoDBの集計クエリで$avgが「-Infinity」を返す仕組みと取得方法
MongoDBの集計クエリで$avgが「-Infinity」を返す仕組み
MongoDBの集計(aggregation)クエリで平均値を求める際には、$avg演算子を使用します。本記事では、-Infinity(負の無限大)を含むドキュメントが存在する場合に、$avgがどのような結果を返すのかを、aggregate()メソッドを使って実際に確認していきます。
1. サンプルコレクションの作成
まず、-Infinityの値を含むドキュメントを持つコレクション「demo5」を作成しましょう。以下のようにinsertOne()メソッドを使ってドキュメントを挿入します。
> db.demo5.insertOne({ "_id" : 100, "seq" : 10, "Value" : -Infinity });
{ "acknowledged" : true, "insertedId" : 100 }
> db.demo5.insertOne({ "_id" : 101, "seq" : 10, "Value" : 50 });
{ "acknowledged" : true, "insertedId" : 101 }
> db.demo5.insertOne({ "_id" : 102, "seq" : 20, "Value" : 60 });
{ "acknowledged" : true, "insertedId" : 102 }
> db.demo5.insertOne({ "_id" : 103, "seq" : 20, "Value" : 50 });
{ "acknowledged" : true, "insertedId" : 103 }2. 登録されたドキュメントの確認
find()メソッドを使って、コレクション内のすべてのドキュメントを表示してみましょう。
> db.demo5.find();
実行すると、以下のような出力が得られます。
{ "_id" : 100, "seq" : 10, "Value" : -Infinity }
{ "_id" : 101, "seq" : 10, "Value" : 50 }
{ "_id" : 102, "seq" : 20, "Value" : 60 }
{ "_id" : 103, "seq" : 20, "Value" : 50 }3. $avgを使った集計クエリの実行
次に、集計クエリ内で$avgを使用して「-Infinity」の結果を取得してみます。seqフィールドを基準にグループ化し、Valueフィールドの平均値を計算します。
> db.demo5.aggregate([{$group:{"_id":"$seq", "average" : {$avg : "$Value"}}}]);実行結果は以下の通りです。
{ "_id" : 20, "average" : 55 }
{ "_id" : 10, "average" : -Infinity }結果のポイント
seqが20のグループでは平均値が「55」と正しく計算されましたが、seqが10のグループでは「-Infinity」という結果になりました。これは、-InfinityがIEEE 754浮動小数点数の仕様における特別な値であり、有限の数値(この例では50)と加算しても結果が-Infinityのまま変わらないためです。つまり、(-Infinity + 50) ÷ 2 = -Infinity となり、平均値も-Infinityになります。
この挙動を理解しておくと、実データに-Infinityが混在している場合の集計結果の解釈に役立ちます。意図しない結果を避けたい場合は、$matchステージで事前に-Infinityのドキュメントを除外してから集計を行うのがおすすめです。
-
Microsoft Wordを無料で使う方法まとめ|オンライン版・アプリ・学生特典まで徹底解説
Microsoft Wordを無料で手に入れるのは夢のような話に思えるかもしれません。確かにWordは優れたソフトウェアであり、オフィスや家庭、学校などあらゆる環境で欠かせない存在ですが、通常は毎年ライセンス料を支払う必要があります。しかし実は、Microsoft Wordにお金をかけずに利用できる方法がいくつかあるのです。 Word文書を開きたい、編集したい、あるいは閲覧したいだけの場合でも、これから紹介する無料のMicrosoft Wordツールがきっと役立ちます。 ここで紹介する方法が求めているものと違う場合でも、Microsoft Wordをインストールしたり購入したりすることなく
-
Microsoft Office 365(Microsoft 365)を無料で利用する8つの方法
Microsoft Office 365(現在は「Microsoft 365」に名称変更)のサブスクリプションは年間70ドルから、または約150ドルで永続ライセンスを購入できます。しかし、必ずしもこの価格を支払う必要はありません。 外出先での利用でも、PCでの利用でも、たまに使うだけでも、1日8時間使い続ける場合でも、Office 365を無料で手に入れる方法はいくつか存在します。本記事では、その具体的な方法を詳しくご紹介します。 1. Microsoft Office Online(Web版)を使う Googleの生産性アプリ群に対抗するため、Microsoftは人気のOfficeアプリのオ