MongoDBコレクション内の全ドキュメントのキー値を合計する方法
MongoDBのコレクション内にあるすべてのドキュメントにわたって、特定のキーの値を合計したい場合は、aggregate()メソッドを使用します。集計パイプラインの中で$groupステージと$sum演算子を組み合わせることで、合計値を簡単に算出できます。
サンプルコレクションの作成
まずは実際の動作を確認するために、ドキュメントを含むコレクションを作成しましょう。以下のクエリを実行して、コレクションにドキュメントを挿入します。
> db.sumOfValueDemo.insertOne({"Name":"Larry","Amount":14.50});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c8ee7272f684a30fbdfd592")
}
> db.sumOfValueDemo.insertOne({"Name":"Mike","Amount":15.68});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c8ee7342f684a30fbdfd593")
}
> db.sumOfValueDemo.insertOne({"Name":"Carol","Amount":50.32});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c8ee7412f684a30fbdfd594")
}
> db.sumOfValueDemo.insertOne({"Name":"David","Amount":120.90});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c8ee7532f684a30fbdfd595")
}登録したドキュメントの確認
find()メソッドを使うと、コレクション内のすべてのドキュメントを表示できます。クエリは次の通りです。
> db.sumOfValueDemo.find().pretty();
実行結果は以下のようになります。
{
"_id" : ObjectId("5c8ee7272f684a30fbdfd592"),
"Name" : "Larry",
"Amount" : 14.5
}
{
"_id" : ObjectId("5c8ee7342f684a30fbdfd593"),
"Name" : "Mike",
"Amount" : 15.68
}
{
"_id" : ObjectId("5c8ee7412f684a30fbdfd594"),
"Name" : "Carol",
"Amount" : 50.32
}
{
"_id" : ObjectId("5c8ee7532f684a30fbdfd595"),
"Name" : "David",
"Amount" : 120.9
}合計値を求めるクエリの実行
それでは本題です。コレクション内の全ドキュメントにわたって「Amount」キーの値を合計するには、次のようなクエリを実行します。$groupステージで_idに空文字を指定して全ドキュメントを1つのグループにまとめ、$sum演算子で各ドキュメントのAmountフィールドの値を合計しています。さらに$projectステージで、_idを除外しつつ結果を「TotalAmount」という名前のフィールドとして出力しています。
> db.sumOfValueDemo.aggregate({
... $group: {
... _id: '',
... "Amount": { $sum: '$Amount' }
... }
... }, {
... $project: {
... _id: 0,
... "TotalAmount": '$Amount'
... }
... });実行結果は以下の通りです。
{ "TotalAmount" : 201.4 }このように、4件のドキュメントのAmountの値(14.5 + 15.68 + 50.32 + 120.9)を合計した「201.4」という結果が得られました。$groupと$sumを活用すれば、大量のドキュメントがあってもサーバーサイドで効率的に合計値を計算できるため、アプリケーション側での集計処理が不要になり、パフォーマンス面でも有利です。
-
MongoDBコレクション内のすべてのドキュメントに新しいフィールドを追加する方法
MongoDBコレクション内のすべてのドキュメントに新しいフィールドを追加する方法MongoDBで既存のドキュメントに新しいフィールドを追加するには、集計パイプラインの$addFieldsステージを使用します。まずは、サンプルとなるコレクションとドキュメントを作成してみましょう。サンプルコレクションの作成insertOne()メソッドを使用して、ドキュメントを1件ずつ挿入します。> db.demo712.insertOne({Name:John}); { acknowledged : true, insertedId : ObjectId(5ea85f675d33e20ed1
-
Javaを使ってMongoDBコレクションからすべてのドキュメントを取得する方法
MongoDBでは、find()メソッドを使用することで、既存のコレクションからドキュメントを取得できます。この記事では、MongoDBシェルでの基本操作と、Javaプログラムからすべてのドキュメントを取得する手順について詳しく解説します。MongoDBシェルでの構文db.coll.find()各要素の意味は以下のとおりです。db:対象となるデータベースcoll:ドキュメントを取得したいコレクションの名前シェルでの実行例ここでは、MongoDBデータベース内に「students」というコレクションがあり、次のドキュメントが登録されているものとします。{name:"Ram",