Pokud pouze filtrujete prvek v poli, i když se shoduje pouze jeden z prvků, bude vráceno celé pole a pokud žádná shoda nenastane, nebude vráceno nic. Proto musíte pole rozdělit do různých dokumentů pomocí $unwind
a teprve po něm zkuste výsledky filtrovat pomocí $match
.
Následující dotaz by mohl vyřešit váš problém :
db.collection.aggregate([
{"$unwind": "$product"},
{"$match": {"product.name": "FirstWarehouseName1"}} // replace here with the name you want
])
Funguje mongoplayground
Pokud mohu, jen tip :Každý produkt byste měli uložit do jiného dokumentu, ačkoli MongoDB je bez schématu a umožňuje nám mít téměř jakýkoli formát dokumentu, nezapomeňte, že každý dokument by měl obsahovat ekvivalent jednoho řádku informací v běžné relační databázi. V opačném případě začnete mít tyto problémy a navíc problémy s výkonem.