Wenn Sie nur ein Element in einem Array filtern, wird das gesamte Array zurückgegeben, selbst wenn nur eines der Elemente übereinstimmt, und es wird nichts zurückgegeben, wenn es keine Übereinstimmung gibt. Daher müssen Sie Ihr Array mithilfe von $unwind
in verschiedene Dokumente aufteilen Operator und versuchen Sie erst danach, die Ergebnisse mit $match
zu filtern .
Die folgende Abfrage könnte Ihr Problem lösen :
db.collection.aggregate([
{"$unwind": "$product"},
{"$match": {"product.name": "FirstWarehouseName1"}} // replace here with the name you want
])
Arbeiten mongoplayground
Wenn ich darf, nur ein Tipp :Sie sollten jedes Produkt in einem anderen Dokument speichern, obwohl MongoDB schemalos ist und uns fast jedes Dokumentformat ermöglicht, denken Sie daran, dass jedes Dokument das Äquivalent zu einer Informationszeile in einer regulären relationalen Datenbank enthalten sollte. Andernfalls treten diese Probleme und zusätzlich Leistungsprobleme auf.