【MongoDB】$addFieldsで新しいフィールドを追加し、価格を特定の数値で割った結果を連結する方法
MongoDBで既存のドキュメントに新しいフィールドを追加するには、集計パイプラインの$addFieldsステージを使用します。本記事では、ネストされた配列内の商品価格(ProductPrice)を特定の数値で割り、その結果を文字列として連結して新しいフィールドに格納する方法を、サンプルコードとともに解説します。
サンプルコレクションの作成
まず、insertOne()メソッドを使用して、ドキュメントを含むコレクションを作成します。
> db.demo719.insertOne(
... {
... "Number":"7374644",
... "details" : {
... "otherDetails" : [
... {
... "ProductId" :"102",
... "ProductPrice" : NumberInt(500)
... },
... {
... "ProductId" :"103",
... "ProductPrice" : NumberInt(2000)
... }
... ]
... }
... }
... );
{
"acknowledged" : true,
"insertedId" : ObjectId("5eaae56c43417811278f5882")
}
作成したドキュメントの確認
find()メソッドを使って、コレクション内のすべてのドキュメントを表示してみましょう。
> db.demo719.find();
上記のコマンドを実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5eaae56c43417811278f5882"), "Number" : "7374644", "details" : { "otherDetails" : [ { "ProductId" : "102", "ProductPrice" : 500 }, { "ProductId" : "103", "ProductPrice" : 2000 } ] } }
新しいフィールドを追加し、価格を割った結果を連結するクエリ
次のクエリでは、$addFieldsで「productPriceList」という新しいフィールドを追加し、各商品価格を5で割った値を文字列に変換したうえで連結しています。
処理の流れは以下の通りです。
- $map:details.otherDetails.ProductPrice の各要素を取り出し、$divideで5で割った後、$toStringで文字列に変換します。
- $reduce:変換された各値を初期値 "" から順に$concatで連結し、区切り文字として改行コード(\n)を挿入します。
- $project:_idを除外し、NumberとproductPriceListのみを出力します。
> db.demo719.aggregate([
... {
... $addFields:{
... productPriceList: {
... $reduce: {
... input: {
... $map: {
... input: "$details.otherDetails.ProductPrice",
... in: { $toString: { $divide: ["$$this", 5] } }
... }
... },
... initialValue: "",
... in: { $concat: ["$$value", "$$this", " \n "] }
... }
... }
... }
... },
... {
... $project: {
... _id: 0,
... Number:1,
... productPriceList:1
... }
... }
... ])
実行結果
このクエリを実行すると、次のような出力が得られます。
{ "Number" : "7374644", "productPriceList" : "100 \n 400 \n " }
出力結果を見ると、500÷5=100、2000÷5=400 がそれぞれ文字列に変換され、改行コードで連結された値が新しいフィールド「productPriceList」に格納されていることがわかります。このように$addFieldsと$map、$reduceを組み合わせることで、ネストされた配列の数値を柔軟に加工し、整形したテキストとして新しいフィールドに追加できます。
-
【MongoDB】$addFieldsで新しいフィールドを追加し、価格を特定の数値で割った結果を連結する方法
MongoDBで既存のドキュメントに新しいフィールドを追加するには、集計パイプラインの$addFieldsステージを使用します。本記事では、ネストされた配列内の商品価格(ProductPrice)を特定の数値で割り、その結果を文字列として連結して新しいフィールドに格納する方法を、サンプルコードとともに解説します。 サンプルコレクションの作成 まず、insertOne()メソッドを使用して、ドキュメントを含むコレクションを作成します。 > db.demo719.insertOne( ... { ... Number:7374644, ... de
-
MongoDBで特定の数値より大きいフィールド値を持つドキュメントを照合して取得する方法
MongoDBでドキュメントを照合(マッチング)するには、集計パイプライン(aggregate)内で $match を使用します。さらに、特定の数値より大きい値を条件にしたい場合は、比較演算子の $gt(greater than)を組み合わせます。この記事では、実際にコレクションを作成し、$sort や $limit と組み合わせながら、条件に一致するドキュメントを取得する手順を解説します。1. サンプルコレクションの作成まずは insertOne() メソッドを使って、ドキュメントを含むコレクションを作成しましょう。> db.demo730.insertOne({Name : Chri