MongoDBで文字列として保存された数値の合計を計算する方法
MongoDBでは、aggregate()メソッドと集計パイプライン(Aggregation Pipeline)を活用することで、文字列として保存された数値の合計を計算できます。ポイントは、$groupステージの中で$sum演算子と$toInt演算子を組み合わせることです。
本記事では、実際にコレクションを作成しながら、文字列型の「Price」フィールドの合計を求める手順を解説します。
サンプルコレクションの作成
まず、insertOne()メソッドを使って、文字列型の「Price」フィールドを持つドキュメントを複数件挿入します。
> db.demo71.insertOne({"Price":"20"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e29af210912fae76b13d76e")
}
> db.demo71.insertOne({"Price":"50"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e29af240912fae76b13d76f")
}
> db.demo71.insertOne({"Price":"20"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e29af270912fae76b13d770")
}
> db.demo71.insertOne({"Price":"10"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e29af2d0912fae76b13d771")
}
挿入したドキュメントの確認
find()メソッドを使って、コレクション内のすべてのドキュメントを表示してみましょう。
> db.demo71.find();
上記のコマンドを実行すると、次のような出力が得られます。「Price」フィールドがダブルクォートで囲まれていることから、数値ではなく文字列型として保存されていることがわかります。
{ "_id" : ObjectId("5e29af210912fae76b13d76e"), "Price" : "20" }
{ "_id" : ObjectId("5e29af240912fae76b13d76f"), "Price" : "50" }
{ "_id" : ObjectId("5e29af270912fae76b13d770"), "Price" : "20" }
{ "_id" : ObjectId("5e29af2d0912fae76b13d771"), "Price" : "10" }
文字列の合計を計算するクエリ
それでは、文字列として保存された数値の合計を計算するクエリを見ていきましょう。$toInt演算子で文字列を整数に変換し、その結果を$sum演算子で合計します。
> db.demo71.aggregate([
... {
... $group: {
... _id: null,
... TotalPrice: {
... $sum: {
... $toInt: "$Price"
... }
... }
... }
... }
... ]);
このクエリを実行すると、次の出力が得られます。
{ "_id" : null, "TotalPrice" : 100 }
「20 + 50 + 20 + 10 = 100」となり、文字列型の値でも正しく合計が計算できていることが確認できます。
クエリのポイント解説
_id: null:すべてのドキュメントを1つのグループにまとめるために指定します。これにより、コレクション全体の合計値を取得できます。$toInt:文字列やdouble型などの値を32ビット整数に変換する演算子です。MongoDB 4.0以降で利用可能です。$sum:グループ化された各ドキュメントの値を合計する集計演算子です。
注意点
$toIntは変換できない文字列(例:「abc」など)が含まれる場合にエラーが発生します。変換できないデータが混在する可能性がある場合は、エラー時の代替値を指定できる$convert演算子の使用を検討すると安全です。
$convert: { input: "$Price", to: "int", onError: 0 }
このように指定すれば、変換に失敗したドキュメントは0として扱われ、集計全体がエラーで中断されることを防げます。
-
MongoDBで文字列を数値に変換する方法を徹底解説
MongoDBでは、文字列として保存された数値データを実際の数値型に変換するには、シェル上でスクリプトを実行する必要があります。本記事では、サンプルコレクションを作成し、forEach()とparseInt()を組み合わせて文字列を整数へ変換する手順を、実行結果付きでわかりやすく解説します。 1. サンプルコレクションの作成 まず、文字列型の「EmployeeId」を持つドキュメントを格納したコレクションを作成します。insertOne()メソッドを使って、3件のドキュメントを挿入しましょう。 > db.convertStringToNumberDemo.insertOne({Emplo
-
MongoDBでコンソールをクリアする2つの方法|ショートカット「Ctrl + L」とコマンド「cls」の使い方
MongoDBのシェル(mongo / mongosh)を使っていると、実行したクエリや結果がどんどん積み重なり、画面が見づらくなることがあります。そんなときに便利なのがコンソールのクリア機能です。MongoDBでは、以下の2つの方法でコンソールをクリアできます。 方法1:キーボードショートカット「Ctrl + L」を使う 最も手軽なのが、キーボードショートカットを使う方法です。次のキーを押すだけで、即座にコンソールをクリアできます。 Ctrl + L このキーを押すと、それまで表示されていたログや実行結果がすべて消え、まっさらな状態になります。Linuxのターミナルなどと同じ操作感なので、