MongoDBの集計フレームワーク(Aggregation Framework)で絶対値を取得する方法
MongoDBの集計フレームワークでは、$abs 演算子を使用することで、数値の絶対値を簡単に取得できます。この記事では、実際にコレクションを作成し、$abs 演算子を使って絶対値を求める手順を解説します。
1. サンプルコレクションの作成
まず、テスト用のコレクションにドキュメントを挿入します。正の値、負の値、0 を含むデータを用意します。
> db.absoluteValueDemo.insert({"Value":98});
WriteResult({ "nInserted" : 1 })
> db.absoluteValueDemo.insert({"Value":-100});
WriteResult({ "nInserted" : 1 })
> db.absoluteValueDemo.insert({"Value":0});
WriteResult({ "nInserted" : 1 })
> db.absoluteValueDemo.insert({"Value":-9999990});
WriteResult({ "nInserted" : 1 })2. 登録したドキュメントの確認
find() メソッドを使用すると、コレクション内のすべてのドキュメントを表示できます。
> db.absoluteValueDemo.find().pretty();
上記のクエリを実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5ca271f56304881c5ce84b9a"), "Value" : 98 }
{ "_id" : ObjectId("5ca271fa6304881c5ce84b9b"), "Value" : -100 }
{ "_id" : ObjectId("5ca271fe6304881c5ce84b9c"), "Value" : 0 }
{ "_id" : ObjectId("5ca2720f6304881c5ce84b9d"), "Value" : -9999990 }3. 集計フレームワークで絶対値を取得する
$project ステージと $abs 演算子を組み合わせた aggregate() クエリを実行することで、「Value」フィールドの絶対値を「AbsoluteValue」という新しいフィールドとして取得できます。
> db.absoluteValueDemo.aggregate({ $project: { AbsoluteValue: { $abs: '$Value' } }});実行結果は以下のとおりです。負の値(-100、-9999990)が正の値(100、9999990)に変換されていることが確認できます。
{ "_id" : ObjectId("5ca271f56304881c5ce84b9a"), "AbsoluteValue" : 98 }
{ "_id" : ObjectId("5ca271fa6304881c5ce84b9b"), "AbsoluteValue" : 100 }
{ "_id" : ObjectId("5ca271fe6304881c5ce84b9c"), "AbsoluteValue" : 0 }
{ "_id" : ObjectId("5ca2720f6304881c5ce84b9d"), "AbsoluteValue" : 9999990 }まとめ
MongoDBで数値の絶対値を取得したい場合は、集計フレームワークの $abs 演算子を使うのが最もシンプルな方法です。$project ステージ内で $abs を指定するだけで、元のドキュメントを変更することなく、絶対値に変換した結果を出力できます。差分の計算や評価指標の算出など、負の値を扱いたくない場面でぜひ活用してください。
-
MongoDBの集計パイプラインで点数が最も少ない2つのドキュメントを取得する方法
点数(Marks)の昇順に並べ替えたリストを取得するには $sort を使用します。さらに $limit: 2 を組み合わせることで、点数が最も少ない2件のドキュメントだけを表示できます。ここでは、実際に動作を確認できるよう、サンプル用のコレクションを作成していきましょう。1. サンプルコレクションの作成まずは insertOne() メソッドを使って、4件のドキュメントを登録します。> db.demo709.insertOne({Name:"John","Marks":75}); { "acknowledged
-
MongoDBの集計パイプラインで複数フィールドをカウントする方法($facet活用)
MongoDBで複数のフィールドごとにドキュメントをカウントしたい場合、$facet演算子を使うのが効果的です。$facetは、同じ入力ドキュメント群に対して、単一のステージ内で複数の集計パイプラインを同時に処理できる強力な機能です。この記事では、実際にコレクションを作成し、$facetを組み合わせた集計クエリで複数フィールドの値をカウントする手順を解説します。1. サンプルコレクションの作成まず、insertOne()メソッドを使ってサンプルドキュメントを挿入します。各ドキュメントにはdetails1・details2・details3という3つのネストされたフィールドを持たせます。>