sql >> Database >  >> NoSQL >> MongoDB

MongoDB:forEach vs fetch + each

De twee statements doen in principe hetzelfde op het kern-API-niveau, namelijk de cursor ophalen en de resultaten transformeren. Er is echter één "kern" verschil over prestaties:

  • .forEach() zal de cursorresultaten "één voor één" transformeren en de iteratorfunctie verwerken die het is verstrekt.

  • .fetch() aan de andere kant krijgt de "array" van de cursor "alles tegelijk", wat betekent dat het allemaal "in het geheugen" is in één klap.

Dus wat er ook gebeurt, geen van beide is eigenlijk "sneller" in het uitvoeren van de "kern" -bewerking van het ophalen van de cursor van de query. Het niet evalueren van een "expressie" bij elke iteratie van de cursor "kan" echter iets sneller zijn, dus .fetch() zou hier een "beetje" kunnen winnen.

De grote vangst is natuurlijk "alles is nu in het geheugen", dus er is de "overhead" om dat te overwegen. Ook ten tijde van .fetch() de _.each() moet nog worden verwerkt, zoals het spreekwoord zegt. "Wat je "wint" op de schommels, "los" waarschijnlijk op de rotondes" .

Zonder volledige benchmarking van specifieke gevallen zullen de "timings" waarschijnlijk vergelijkbaar zijn. En generieke benchmarking is zo goed als nutteloos, tenzij het specifiek de omvang van de datasets waarmee u werkt, toepast.

Het algemene geval komt daarom uit, "Ongeveer hetzelfde" , Maar met behulp van .fetch() gaat meer geheugen in beslag nemen dan gewoon een cursor vanaf het begin herhalen.




  1. Mongo DB-object-ID deserialiseren met JSON-serializer

  2. Hoe maak je een datumveld met standaardwaarde als de huidige tijdstempel in MongoDb?

  3. Moet ik ObjectID of uid (door mijzelf geïmplementeerd) gebruiken om de gebruiker te identificeren?

  4. Hoe krijg ik toegang tot een reeds bestaande collectie met Mongoose?