I’m using mongoose with Apollo.
I have the following schema:
extend type Query {
racePersons(personIds: [String!]): [PersonRaceByIds]
}
type PersonRaceByIds{
_id: ID!
competitors: [Competitor]
}
type Competitor {
pos: String,
person_id: String,
person_name: String,
age: Int,
}
I want to group by each parameters. For example if I exec
RaceByPersons(personIds: ["61cf111de1e449ceee12b958", "61cf111de1e449ceee12b89d"]) {
_id
competitors {
person_id
pos
}
}
I would want to get something like that:
61cf111de1e449ceee12b958 [{
{
"_id": "60cf1129e1e449ceee12c87c",
"competitors": [
{
"person_id": "60cf111de1e449ceee12b89d",
"pos": "1"
},
{
"person_id": "60cf111de1e449ceee12b958",
"pos": "8"
}
]},
61cf111de1e449ceee12b89d [{
{
"_id": "60d4e8063a4409433c673ad2",
"competitors": [
{
"person_id": "60cf111de1e449ceee12b89d",
"pos": "3"
}
]
]}
I tried using group with aggregate but I couldn’t personIds are the parameters. For example: [“61cf111de1e449ceee12b958”,“61cf111de1e449ceee12b89d”]
This is my resolver:
.aggregate([
{
$match: { 'competitors.person_id': { '$in': personIds } }
},
{
$project: {
competitors: {
$filter: {
input: "$competitors",
as: "r",
cond: {
'$or': [
{ '$in': ['$$r.person_id', personIds] }
]
}
}
},
_id: 1,
},
},
Thank you.
Regards