Als u alleen een element in een array filtert, zelfs als slechts één van de elementen overeenkomt, wordt de hele array geretourneerd en wordt er niets geretourneerd als er geen overeenkomst was. Daarom moet u uw array in verschillende documenten scheiden met behulp van de $unwind
operator, en pas daarna, probeer de resultaten te filteren met $match
.
De volgende vraag zou uw probleem kunnen oplossen :
db.collection.aggregate([
{"$unwind": "$product"},
{"$match": {"product.name": "FirstWarehouseName1"}} // replace here with the name you want
])
Werkende mongoplayground
Als ik mag, slechts een tip :U moet elk product in een ander document opslaan, hoewel MongoDB schemaloos is en ons in staat stelt om bijna elk documentformaat te hebben, onthoud dat elk document het equivalent moet bevatten van één rij informatie in een gewone relationele database. Anders krijg je deze problemen en bovendien prestatieproblemen.