sql >> Databasteknik >  >> NoSQL >> MongoDB

Exekveringen av Mongodb-frågan tar för mycket tid

Det finns många saker att göra för att optimera din fråga. Vad jag skulle prova :

  • Som Anthony Winzlet sa i kommentarerna, använd som möjligt $match-scen som första etapp. På så sätt kan du minska antalet dokument som skickas till följande stadier och använda index.

  • Förutsatt att du använder minst 3.6 mongo-versionen, ändra dina uppslagssteg med hjälp av 'let/pipeline'-syntaxen (se här ). På så sätt kan du integrera dina "externa filter" ( "customer_info.status":{$ne:9}, "model_info.status":{$ne:9} ) i ett $match-steg i din uppslagningspipeline. Med index på högra fält / samlingar kommer du att få lite tid / minne i dina $lookup-stadier.

  • Gör dina avkopplingssteg så sent som möjligt för att begränsa antalet dokument som skickas till följande steg.

Det är viktigt att förstå hur aggregeringspipeline fungerar:varje steg tar emot data, gör sina grejer och skickar data till nästa steg. Så ju mindre data som skickas till pipelinen, desto snabbare blir din fråga.




  1. Bestäm effektivt ägaren till en post i en hierarki med MongoDB

  2. Hur hämtar man alla inbäddade dokumentvärden med den officiella C#-drivrutinen för MongoDB?

  3. Hur kan jag lägga till bilder i mongoDB?

  4. Karta-minska prestanda i MongoDb 2.2, 2.4 och 2.6