Docs Menu
Docs Home
/
MongoDBマニュアル
/ / /

$map(集計)

項目一覧

  • 定義
  • 互換性
  • 構文
  • 配列の各要素に追加する
  • 各配列要素の切り捨て
  • 摂氏温度を華氏温度に変換
  • 詳細
$map

配列内の各項目にを適用し、適用結果の配列を返します。

次の環境でホストされる配置には $map を使用できます。

  • MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです

  • MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン

  • MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン

$map式の構文は次のとおりです。

{ $map: { input: <expression>, as: <string>, in: <expression> } }
フィールド
仕様

input

配列に解決される

inputnull に解決されるか、欠落しているフィールドを参照する場合、$mapnull を返します。

input が配列以外、null 以外の値に解決される場合、パイプラインはエラーになります。

as

任意。input 配列の各要素を表す変数の名前。名前が指定されていない場合、変数名はデフォルトで this になります。

in

input 配列の各要素に適用される。式は、as に指定された変数名を使用して各要素を個別に参照します。

式の詳細については、「式 」を参照してください。

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 ]
}
]

前の例で使用された式の詳細については、以下を参照してください。

戻る

$ltrim