Jeśli po prostu filtrujesz element w tablicy, nawet jeśli tylko jeden z elementów pasuje, zostanie zwrócona cała tablica i nic nie zostanie zwrócone, jeśli nie było dopasowania. Dlatego musisz podzielić swoją tablicę na różne dokumenty za pomocą $unwind
operatora i dopiero po nim spróbuj filtrować wyniki za pomocą $match
.
Poniższe zapytanie może rozwiązać Twój problem :
db.collection.aggregate([
{"$unwind": "$product"},
{"$match": {"product.name": "FirstWarehouseName1"}} // replace here with the name you want
])
Praca mongoplayground
Jeśli mogę, tylko napiwek :Powinieneś przechowywać każdy produkt w innym dokumencie, chociaż MongoDB jest bezschematowy i pozwala nam mieć prawie każdy format dokumentu, pamiętaj, że każdy dokument powinien zawierać odpowiednik jednego wiersza informacji w zwykłej relacyjnej bazie danych. W przeciwnym razie zaczniesz mieć te problemy, a dodatkowo problemy z wydajnością.