私はmongoDB集計パイプラインに不慣れで、本当に基本的な質問がありますが、どこにも答えが見つかりませんでした。次のブロックを単純に変換したいと思います。
"exclude" : [
{
"name" : "Accenture"
},
{
"name" : "Aon Consulting"
}
]
に:
"exclude" : [
"Accenture",
"Aon Consulting"
]
集約パイプラインを使用していますが、 https://docs.mongodb.com/manual/reference/operator/aggregation/ のドキュメントを調べても、その方法を見つけることができないようです。ご協力いただきありがとうございます。
確かに、変換フレームワークを使用して変換を処理することは正しい方向でした。配列内のオブジェクトキーをキー値のみの配列にマップする主な演算子は$map
この場合。
$addFields
パイプライン内で一緒に使用して、変換されたフィールドを次のように射影します。
db.collection.aggregate([
{
"$addFields": {
"exclude": {
"$map": {
"input": "$exclude",
"as": "el",
"in": "$$el.name"
}
}
}
}
])
上記では、$addFields
パイプラインステージがドキュメントに新しいフィールドを追加し、新しいフィールドの名前が既存のフィールド名と同じです(_id
を含む)、$addFields
は既存のフィールド名を上書きします指定した式の値を持つそのフィールドの値。
したがって、基本的に上記はexcludes
配列を$map
を使用して変換された配列に置き換えます$map
は、入力配列の各要素に式を適用することによって機能します。式は、as
フィールドで指定された変数名($$el
)を使用して各要素を個別に参照し、適用された結果を含む配列を返します。
@chridamの答えは正しいですが、$map
を使用する必要はありません。単純な$addFields
/$project
で十分です:
db.collection.aggregate([
{
$addFields: {
exclude : '$exclude.name'
}
}
])