Om du bara filtrerar ett element i en array, även om bara ett av elementen matchar, kommer hela arrayen att returneras, och ingenting kommer att returneras om det inte fanns någon matchning. Därför måste du dela upp din array i olika dokument med $unwind
operatör, och först efter det, försök att filtrera resultaten med $match
.
Följande fråga kan lösa ditt problem :
db.collection.aggregate([
{"$unwind": "$product"},
{"$match": {"product.name": "FirstWarehouseName1"}} // replace here with the name you want
])
Fungerar mongoplayground
Om jag får, bara ett tips :Du bör lagra varje produkt i ett annat dokument, även om MongoDB är schemalöst och tillåter oss att ha nästan alla format av dokument, kom ihåg att varje dokument bör innehålla motsvarande en rad med information i en vanlig relationsdatabas. Annars kommer du att få dessa problem och dessutom prestandaproblem.