これにはいくつかのアプローチがありますが、MongoDBのバージョンに大きく依存します。 2.6以降の最新バージョンは、 $をサポートしています。マップ
$projectで使用できる演算子コード>
やりたいことをするために:
db.friend.aggregate([
{ "$project": {
"name": 1,
"buddies": {
"$map": {
"input": "$friends",
"as": "el",
"in": {
"nickName": "$$el.name",
"age": "$$el.age"
}
}
}
}}
])
以前のバージョンでは、 $ unwind コード>
配列要素を操作し、 $ group
:
db.collection.aggregate([
{ "$unwind": "$friends" },
{ "$group": {
"_id": "$_id",
"name": { "$first": "$name" },
"buddies": {
"$push": {
"nickName": "$friends.name",
"age": "$friends.age"
}
}
}}
])
最初の形式は、配列の内容を非正規化し、処理するパイプラインでより多くのドキュメントを生成しないため、もう少し効率的です。