I am very new in MongoDB. I am trying to make lookup in multi label nested array. My data is looks like bellow.
[
{
"_id": "621eedae92979fd8f0e9451d",
"name": "Pallab Koley",
"shifts": {
"_id": "62636b9fcbda6d2b17f5cae0",
"month": "2022-05",
"shift": [
{
"date": "2022-05-01",
"shiftId": "622bb0f4b88dc92e3c2cac56"
}
]
}
},
{
"_id": "62626a7446ba9a911a623b37",
"name": "Pinki Das",
"shifts": {
"_id": "62636ba4cbda6d2b17f5cae1",
"month": "2022-05",
"shift": [
{
"date": "2022-05-01",
"shiftId": "622bb0f4b88dc92e3c2cac56"
}
]
}
}
]
And I am trying to run lookup like bellow.
{
"$lookup": {
"from": "shifts",
"localField": "shifts.shift.shiftId",
"foreignField": "_id",
"as": "shifts.shift.shiftId"
}
}
I am getting the result.
[
{
"_id": "621eedae92979fd8f0e9451d",
"name": "Pallab Koley",
"shifts": {
"_id": "62636b9fcbda6d2b17f5cae0",
"month": "2022-05",
"shift": {
"shiftId": [
{
"_id": "622bb0f4b88dc92e3c2cac56",
"name": "Day"
}
]
}
}
},
{
"_id": "62626a7446ba9a911a623b37",
"name": "Pinki Das",
"shifts": {
"_id": "62636ba4cbda6d2b17f5cae1",
"month": "2022-05",
"shift": {
"shiftId": [
{
"_id": "622bb0f4b88dc92e3c2cac56",
"name": "Day"
}
]
}
}
}
]
But my expectation data should looks like bellow.
[
{
"_id": "621eedae92979fd8f0e9451d",
"name": "Pallab Koley",
"shifts": {
"_id": "62636b9fcbda6d2b17f5cae0",
"month": "2022-05",
"shift": [
{
"date": "2022-05-01",
"shiftId": {
"_id": "622bb0f4b88dc92e3c2cac56",
"name": "Day"
}
}
]
}
},
{
"_id": "62626a7446ba9a911a623b37",
"name": "Pinki Das",
"shifts": {
"_id": "62636ba4cbda6d2b17f5cae1",
"month": "2022-05",
"shift": [
{
"date": "2022-05-01",
"shiftId": {
"_id": "622bb0f4b88dc92e3c2cac56",
"name": "Day"
}
}
]
}
}
]
Here is date
field under shifts.shift
is missing. shiftId
is replacing all the field under shift array. Please help me out.
mongoplayground
2
Answers
Sorry I made a mistake to show my requirement. I have changed the play ground with multiple shift. Modified play ground . And it result should looks like bellow.
You are overriding the original content of the array with your lookup result.
Consider using subpipeline to store the date as variable and assign it to the lookup result.
Here is the Mongo playground for your reference.