返す配列の特定のフィールドのみを選択したい場合は、ドキュメントの「再形成」について話していることになります。 「基本的な」フィールドの選択以外の場合、これは .aggregate()
.find()
の代わりにメソッドとして
。
したがって、ここでの2つの要件は、 $filter
です。
配列のコンテンツを「照合」して返すとともに、 $map
配列自体からの実際の「返すフィールド」:
User.aggregate([
{ "$match": { "children.name": "def" } },
{ "$project": {
"name": 1,
"children": {
"$map": {
"input": {
"$filter": {
"input": "$children",
"as": "c",
"cond": { "$eq": [ "$$c.name", "def" ] }
}
},
"as": "c",
"in": {
"age": "$$c.age",
"height": "$$c.height"
}
}
}
}}
])
ここで$filter
配列の内容を条件に一致するものだけに減らすために使用されます。同じ"name"
を持つものであること 値としてのプロパティ"def"
。これは、"input"
として渡されます。 $map
へのパラメーター
。
$map
演算子は、"in"
で指定した内容に従って何かを返すように「配列を再形成」するという点で、他の言語と同じように機能します。 パラメータ。したがって、ここでは実際にはプロパティに明示的に名前を付け、処理中の現在の配列要素に変数の割り当てを使用して、これらが「新しい」配列コンテンツとして返されるようにします。
全体的な結果は、次を含む配列になります。
- 指定された条件に一致するアイテムのみ。
- 返されるように指定されたフィールドのみ。