sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDb Filter Array

Om du bara filtrerar ett element i en array, även om bara ett av elementen matchar, kommer hela arrayen att returneras, och ingenting kommer att returneras om det inte fanns någon matchning. Därför måste du dela upp din array i olika dokument med $unwind operatör, och först efter det, försök att filtrera resultaten med $match .

Följande fråga kan lösa ditt problem :

db.collection.aggregate([
  {"$unwind": "$product"},
  {"$match": {"product.name": "FirstWarehouseName1"}} // replace here with the name you want
])

Fungerar mongoplayground

Om jag får, bara ett tips :Du bör lagra varje produkt i ett annat dokument, även om MongoDB är schemalöst och tillåter oss att ha nästan alla format av dokument, kom ihåg att varje dokument bör innehålla motsvarande en rad med information i en vanlig relationsdatabas. Annars kommer du att få dessa problem och dessutom prestandaproblem.



  1. hur man lagrar ett komplext objekt i redis (med redis-py)

  2. Mongodb enkel prefixfråga med regex och sortering är långsam

  3. hur man jämför två fält i ett dokument i pipelineaggregation (mongoDB)

  4. Mongoose hitta en och tryck till en mängd dokument