Se si filtra semplicemente un elemento in un array, anche se solo uno degli elementi corrisponde, verrà restituito l'intero array e non verrà restituito nulla se non ci sono corrispondenze. Pertanto, devi separare il tuo array in diversi documenti usando il $unwind
operatore, e solo dopo, prova a filtrare i risultati usando $match
.
La seguente query potrebbe risolvere il tuo problema :
db.collection.aggregate([
{"$unwind": "$product"},
{"$match": {"product.name": "FirstWarehouseName1"}} // replace here with the name you want
])
mongoplayground funzionante
Se posso permettermi, solo un consiglio :Dovresti archiviare ogni prodotto in un documento diverso, sebbene MongoDB sia privo di schemi e ci consenta di avere quasi tutti i formati di documento, ricorda che ogni documento dovrebbe contenere l'equivalente di una riga di informazioni in un normale database relazionale. In caso contrario, inizierai ad avere questi problemi e, in aggiunta, problemi di prestazioni.