I have below workouts collection
[
{
"receiverWorkout": {
"exercises": [
{ "_id": "1", "reps": 0 },
{ "_id": "2", "reps": 4 }
]
},
"senderWorkout": {
"exercises": [
{ "_id": "2", "reps": 12 },
{ "_id": "1", "reps": 8 }
]
}
}
]
I need to match same _id from receiverWorkout and senderWorkout exercises and want to add a key won true or false whose reps are greater.
If you can see first element of receiverWorkout exercises({ "_id": "1", "reps": 0 }) is matching with the second element of the senderWorkout exercises({ "_id": "1", "reps": 8 }) because both have same _id
I have tried this but it does match the same indexes elements
db.colname.aggregate({
"$addFields":{
"senderWorkout.exercises":{
"$map":{
"input":{"$range":[0,{"$size":"$senderWorkout.exercises"}]},
"as":"ix",
"in":{
"$let":{
"vars":{
"rec":{"$arrayElemAt":["$receiverWorkout.exercises","$$ix"]},
"sen":{"$arrayElemAt":["$senderWorkout.exercises","$$ix"]}
},
"in":{
"_id":"$$sen._id",
"reps":"$$sen.reps",
"won":{"$gt":["$$sen.reps","$$rec.reps"]}
}
}
}
}
}
}
})
Expected output should be something like
[
{
"receiverWorkout": {
"exercises": [
{ "_id": "1", "reps": 0, "won": false },
{ "_id": "2", "reps": 4, "won": false }
]
},
"senderWorkout": {
"exercises": [
{ "_id": "2", "reps": 12, "won": true },
{ "_id": "1", "reps": 8, "won": true }
]
}
}
]
I want to avoid $unwind
Please help!!!
from Match two equal fields of arrays of same documents without $unwind
No comments:
Post a Comment