У меня есть коллекция, в которой данные выглядят так
{
"fname":"bob",
"lname":"jones",
"role":"professional",
"active":true,
"jobs":[{
"job":"janitor",
"current":true
},{
"job":"dog groomer"
"current":false
}]
}
Я использую «агрегат» для объединения и отбраковки некоторых данных, которые не нужны на стороне дисплея, и возвращаю упрощенный массив объектов.
People.aggregate([
{ "$match": { "role": "professional", "active": true }},
{ "$project": {
"name": { "$concat": ["$fname", " ", "$lname"] },
"jobs": {
"$filter": {
"input": "$jobs",
"as": "job",
"cond": { "$eq": ["$$job.current", true] }
}
}
}},
{ "$project": {
"name": 1,
"job": { "$arrayElemAt": ["$jobs.job", 0] }
}}
])
Однако я хочу передать и другие элементы объекта People.
Они должны быть переданы через весь трубопровод?
Если я добавлю поля и в первый проект $, то вернется только одно из них ...
так что теперь ЭТО
People.aggregate([
{ "$match": { "role": "professional", "active": true }},
{ "$project": {
"name": { "$concat": ["$fname", " ", "$lname"] },
"jobs": {
"$filter": {
"input": "$jobs",
"as": "job",
"cond": { "$eq": ["$$job.current", true] }
}
},
"role":"$role",
"active":"$active"
}},
{ "$project": {
"name": 1,
"job": { "$arrayElemAt": ["$jobs.job", 0] },
"role":"$role",
"active":"$active"
}}
])
Дает мне:
name
job
role
Что мне не хватает?