I have two collections:
Audios
[
{
"_id": "5f6b1a2e69eef14818ca03a7",
"audioURL": "https://boyd.org",
"state": "draft",
}
{
"_id": "5f6b1e1c6297f34bc6f1fee3",
"name": "navigate",
"audioURL": "http://mariane.org",
"state": "draft",
},
{
"_id": "5f5b5423ba39f738d593b504",
"audioURL": "https://storage/test123mp31599820832928.mp3",
"state": "draft",
}
]
Lessons:
"lessons": [
{
"_id": "5f770e275cef7a611f3cf931",
"minigameDescriptions": [
{
"assessmentSections": [
{
"mark": "step_1",
"start": 1,
"end": 2,
"stepAudio": {
"backingTrackAudioId": "5f6b1a2e69eef14818ca03a7",
"previewTrackAudioId": "5f6b1a2e69eef14818ca03a7"
}
},
{
"mark": "step_2",
"start": 3,
"end": 6,
"stepAudio": {
"backingTrackAudioId": "5f6b1e1c6297f34bc6f1fee3",
"previewTrackAudioId": "5f6b1e1c6297f34bc6f1fee3"
}
},
{
"mark": "step_3",
"start": 7,
"end": 10,
"stepAudio": {
"backingTrackAudioId": "5f6b1a2e69eef14818ca03a7",
"previewTrackAudioId": "5f5b5423ba39f738d593b504"
}
}
],
"drumStyleName": "DrumStyleHalftimeShuffle",
"onboarding": false,
"showHints": false,
"minigameType": "StrummingTrainer",
}
],
"_updated_at": "2020-10-02T12:00:23.848Z",
}
]
}
Now I have to aggregate that because in every mingameDescriptions.assessmentSections there is property stepAudio that has previewTrackAudioId and backingTrackAudioId. These references to collection "audios" and I need to join them there as objects (audio primary key is _id). I've tried following pipeline (right now I only try to lookup for previewTrackAudio ):
{
$unwind: {
path: "$minigameDescriptions.assessmentSections",
preserveNullAndEmptyArrays: true
},
},
{
$lookup: {
from: "audios",
let: {
audioId: "$minigameDescriptions.assessmentSections.stepAudio.previewTrackAudioId"
},
pipeline: [
{
$match: {
$expr: {
$eq: ["$_id", "$$audioId"]
}
}
}
],
as: "minigameDescriptions.assessmentSections.stepAudio.previewTrackAudio"
}
},
{
$unwind: {
preserveNullAndEmptyArrays: true,
path: "$minigameDescriptions.assessmentSections.stepAudio.previewTrackAudio"
}
}
And it "kinda" works, I get following result:
{
"lessons": [
{
"_id": "5f770e275cef7a611f3cf931",
"minigameDescriptions": [
{
"assessmentSections": {
"mark": "step_2",
"start": 3,
"end": 6,
"stepAudio": {
"backingTrackAudioId": "5f6b1e1c6297f34bc6f1fee3",
"previewTrackAudioId": "5f6b1e1c6297f34bc6f1fee3",
"previewTrackAudio": {
"_id": "5f6b1e1c6297f34bc6f1fee3",
"name": "navigate",
"audioURL": "http://mariane.org",
"state": "draft",
}
}
},
"drumStyleName": "DrumStyleHalftimeShuffle",
"onboarding": false,
"showHints": false,
"minigameType": "StrummingTrainer",
},
{
"assessmentSections": {
"mark": "step_3",
"start": 7,
"end": 10,
"stepAudio": {
"backingTrackAudioId": "5f6b1a2e69eef14818ca03a7",
"previewTrackAudioId": "5f5b5423ba39f738d593b504",
"previewTrackAudio": {
"_id": "5f5b5423ba39f738d593b504",
"audioURL": "https://storage/test123mp31599820832928.mp3",
"state": "draft",
}
}
},
"drumStyleName": "DrumStyleHalftimeShuffle",
"onboarding": false,
"showHints": false,
"minigameType": "StrummingTrainer",
},
{
"assessmentSections": {
"mark": "step_1",
"start": 1,
"end": 2,
"stepAudio": {
"backingTrackAudioId": "5f6b1a2e69eef14818ca03a7",
"previewTrackAudioId": "5f6b1a2e69eef14818ca03a7",
"previewTrackAudio": {
"_id": "5f6b1a2e69eef14818ca03a7",
"audioURL": "https://boyd.org",
"state": "draft",
}
}
},
"drumStyleName": "DrumStyleHalftimeShuffle",
"onboarding": false,
"showHints": false,
"minigameType": "StrummingTrainer",
}
],
"_updated_at": "2020-10-02T12:00:23.848Z",
}
]
}
But now instead of having an array with 3 mingameDescriptions.assessmentSections I have an array with three objects that have assesmentSections along with duplicate properties from minigameDescriptions which is wrong :/. How can I fix this?
What I would like to get is:
"lessons": [
{
"_id": "5f770e275cef7a611f3cf931",
"minigameDescriptions": [
{
"assessmentSections": [
{
"mark": "step_1",
"start": 1,
"end": 2,
"stepAudio": {
"backingTrackAudioId": "5f6b1a2e69eef14818ca03a7",
"previewTrackAudioId": "5f6b1a2e69eef14818ca03a7",
"previewTrackAudio": {
"_id": "5f6b1a2e69eef14818ca03a7",
"audioURL": "https://boyd.org",
"state": "draft",
}
}
},
{
"mark": "step_2",
"start": 3,
"end": 6,
"stepAudio": {
"backingTrackAudioId": "5f6b1e1c6297f34bc6f1fee3",
"previewTrackAudioId": "5f6b1e1c6297f34bc6f1fee3",
"previewTrackAudio": {
"_id": "5f5b5423ba39f738d593b504",
"audioURL": "https://storage/test123mp31599820832928.mp3",
"state": "draft",
}
}
},
{
"mark": "step_3",
"start": 7,
"end": 10,
"stepAudio": {
"backingTrackAudioId": "5f6b1a2e69eef14818ca03a7",
"previewTrackAudioId": "5f5b5423ba39f738d593b504",
"previewTrackAudio": {
"_id": "5f5b5423ba39f738d593b504",
"audioURL": "https://storage/test123mp31599820832928.mp3",
"state": "draft",
}
}
}
],
"drumStyleName": "DrumStyleHalftimeShuffle",
"onboarding": false,
"showHints": false,
"minigameType": "StrummingTrainer",
}
],
"_updated_at": "2020-10-02T12:00:23.848Z",
}
]
}