MongoDBの$divide(除算)集計演算子の使い方
MongoDBの$divide演算子とは
MongoDBでフィールド同士の割り算を行いたい場合は、集計フレームワーク(Aggregation Framework)の$divide演算子を使用します。$divide演算子は、配列として渡した2つの値の除算結果を返す演算子で、$projectステージと組み合わせることで新しいフィールドとして計算結果を出力できます。
サンプルコレクションの作成
まず、動作確認用のコレクションを作成しましょう。以下の例では、「aggregationOperatorDemo」というコレクションに、2つの数値フィールドを持つドキュメントを挿入しています。
> db.aggregationOperatorDemo.insertOne({"FirstValue":392883,"SecondValue":10000000000});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd541452cba06f46efe9f01")
}登録されたドキュメントの確認
次に、find()メソッドを使って、コレクション内のすべてのドキュメントを表示してみましょう。
> db.aggregationOperatorDemo.find().pretty();
上記のクエリを実行すると、次のような出力が得られます。
{
"_id" : ObjectId("5cd541452cba06f46efe9f01"),
"FirstValue" : 392883,
"SecondValue" : 10000000000
}$divide演算子を使った除算クエリ
それでは、$divide演算子を使って2つのフィールドの除算を実行してみます。aggregate()メソッドの中で$projectステージを定義し、その中で$divideに除算したい2つのフィールドを配列形式で指定します。ここでは「FirstValue」を「SecondValue」で割った結果を「Value」という新しいフィールドに出力しています。
> db.aggregationOperatorDemo.aggregate([
... { "$project": { "Value": { "$divide": ["$FirstValue", "$SecondValue"] } } }
... ]);実行結果は以下の通りです。FirstValue(392883)をSecondValue(10000000000)で割った値が正しく出力されているのがわかります。
{ "_id" : ObjectId("5cd541452cba06f46efe9f01"), "Value" : 0.0000392883 }まとめ
このように、MongoDBの集計フレームワークでは$divide演算子を使うことで、ドキュメント内の数値フィールド同士の除算を簡単に行うことができます。なお、$divideの引数にはフィールド参照のほかに固定の数値を指定することも可能です。ただし、0で割ろうとするとエラーになる点には注意してください。売上率の計算や平均値の算出など、数値データの集計処理において非常に便利な演算子なので、ぜひ活用してみてください。
-
MongoDBの集計パイプラインで複数フィールドをカウントする方法($facet活用)
MongoDBで複数のフィールドごとにドキュメントをカウントしたい場合、$facet演算子を使うのが効果的です。$facetは、同じ入力ドキュメント群に対して、単一のステージ内で複数の集計パイプラインを同時に処理できる強力な機能です。この記事では、実際にコレクションを作成し、$facetを組み合わせた集計クエリで複数フィールドの値をカウントする手順を解説します。1. サンプルコレクションの作成まず、insertOne()メソッドを使ってサンプルドキュメントを挿入します。各ドキュメントにはdetails1・details2・details3という3つのネストされたフィールドを持たせます。>
-
MongoDBの集約(Aggregation)と投影(Projection)の使い方を解説
MongoDBの集約と投影とはMongoDBで特定のフィールドだけを抽出しながらデータを加工したい場合、aggregate()メソッドと$projectステージを組み合わせるのが効果的です。$projectは、パイプライン内で指定されたフィールドを持つドキュメントだけを次のステージへ渡す役割を果たします。この記事では、実際にコレクションを作成し、$match・$unwind・$sort・$group・$projectを組み合わせた集約パイプラインの具体的な使い方を解説します。サンプルコレクションの作成まず、insertOne()を使ってドキュメントを含むコレクションを作成します。> db