$map(集計)
定義
$map
配列内の各項目に式を適用し、適用結果の配列を返します。
互換性
次の環境でホストされる配置には $map
を使用できます。
MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです
MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン
MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン
構文
$map
式の構文は次のとおりです。
{ $map: { input: <expression>, as: <string>, in: <expression> } }
フィールド | 仕様 |
---|---|
input | 配列に解決される式。
|
as | |
in |
式の詳細については、「式演算子」を参照してください。
例
配列の各要素に追加する
mongosh
では、次のドキュメントを含むgrades
という名前のサンプル コレクションが作成されます。
db.grades.insertMany( [ { quizzes: [ 5, 6, 7 ] }, { quizzes: [ ] }, { quizzes: [ 3, 8, 9 ] } ] )
次の集計操作では、$map
を $add
式と共に使用して、quizzes
配列の各要素を 2
ずつ増加させます。
db.grades.aggregate( [ { $project: { adjustedGrades: { $map: { input: "$quizzes", as: "grade", in: { $add: [ "$$grade", 2 ] } } } } } ] )
この操作は、次の結果を返します。
[ { _id: ObjectId("6390b8f7237da390c6869a62"), adjustedGrades: [ 7, 8, 9 ] }, { _id: ObjectId("6390b8f7237da390c6869a63"), adjustedGrades: [] }, { _id: ObjectId("6390b8f7237da390c6869a64"), adjustedGrades: [ 5, 10, 11 ] } ]
各配列要素の切り捨て
mongosh
では、次のドキュメントを含むdeliveries
という名前のサンプル コレクションが作成されます。
db.deliveries.insertMany( [ { "city" : "Bakersfield", "distances" : [ 34.57, 81.96, 44.24 ] }, { "city" : "Barstow", "distances" : [ 73.28, 9.67, 124.36 ] }, { "city" : "San Bernadino", "distances" : [ 16.04, 3.25, 6.82 ] } ] )
次の集計操作では、$map
を使用して、distances
配列の各要素を truncate
して整数に変換します。
db.deliveries.aggregate( [ { $project: { city: "$city", integerValues: { $map: { input: "$distances", as: "decimalValue", in: { $trunc: "$$decimalValue" } } } } } ] )
この操作は、次の結果を返します。
[ { _id: ObjectId("6390b9b1237da390c6869a65"), city: 'Bakersfield', integerValues: [ 34, 81, 44 ] }, { _id: ObjectId("6390b9b1237da390c6869a66"), city: 'Barstow', integerValues: [ 73, 9, 124 ] }, { _id: ObjectId("6390b9b1237da390c6869a67"), city: 'San Bernadino', integerValues: [ 16, 3, 6 ] } ]
摂氏温度を華氏温度に変換
mongosh
では、次のドキュメントを含むtemperatures
という名前のサンプル コレクションが作成されます。
db.temperatures.insertMany( [ { "date" : ISODate("2019-06-23"), "tempsC" : [ 4, 12, 17 ] }, { "date" : ISODate("2019-07-07"), "tempsC" : [ 14, 24, 11 ] }, { "date" : ISODate("2019-10-30"), "tempsC" : [ 18, 6, 8 ] } ] )
次の集計操作では、$addFields
ステージを使用して、tempsC
配列内の要素に対する華氏相当値が入った tempsF
という新しいフィールドをドキュメントに追加します。摂氏から華氏に変換するために、この操作では $map
を使用して摂氏の値を 9/5
で $multiply
し、その後 32
を $add
します。
db.temperatures.aggregate( [ { $addFields: { "tempsF": { $map: { input: "$tempsC", as: "tempInCelsius", in: { $add: [ { $multiply: [ "$$tempInCelsius", 9/5 ] }, 32 ] } } } } } ] )
この操作は、次の結果を返します。
[ { _id: ObjectId("6390ba11237da390c6869a68"), date: ISODate("2019-06-23T00:00:00.000Z"), tempsC: [ 4, 12, 17 ], tempsF: [ 39.2, 53.6, 62.6 ] }, { _id: ObjectId("6390ba11237da390c6869a69"), date: ISODate("2019-07-07T00:00:00.000Z"), tempsC: [ 14, 24, 11 ], tempsF: [ 57.2, 75.2, 51.8 ] }, { _id: ObjectId("6390ba11237da390c6869a6a"), date: ISODate("2019-10-30T00:00:00.000Z"), tempsC: [ 18, 6, 8 ], tempsF: [ 64.4, 42.8, 46.4 ] } ]
詳細
前の例で使用された式の詳細については、以下を参照してください。