sql >> Database teknologi >  >> NoSQL >> MongoDB

Skriver MongoDB $set kun feltet eller hele dokumentet?

TL;DR:$inc garanterer opdateringer på stedet, $set gør det ikke, men under meget specifikke omstændigheder kan det også gøres på stedet.

Detaljer

Der er to aspekter af dette:

  1. hvordan går det over ledningen?

    Oplysningerne sendes som en operation, et $set forbliver et $set så det er et delta. Det gælder også for den oplog, der bruges til replikering. På denne måde ved hjælp af $set er mere effektiv med hensyn til båndbredde.

  2. hvordan opdateres det på disken?

    MongoDB udfører en på stedet opdatering hvis og kun hvis nøglen (feltet) allerede eksisterer , så når du tilføjer et nyt felt til et dokument, er det en større operation end blot at tildele en anden værdi til et eksisterende felt.

    Selv da skal værdierne dog have samme størrelse og må ikke ændre type og de skal være af typen double, long, int or bool , ellers er det ikke en opdatering på stedet i øjeblikket.

Jeg er ikke sikker på, hvordan det sidste er virkelig vigtigt i praksis , men serveren bruger bestemt helt forskellige kodestier til de to, så det kan f.eks. føre til feltombestilling. For meget store dokumenter vil det sandsynligvis resultere i en målbar forskel i ydeevne.

Dette viser, at $inc er meget anderledes ved, at den kun tillader operationer, som helt sikkert er på plads, fordi $inc fungerer kun på numeriske typer og kan naturligvis ikke ændre størrelse eller type.



  1. MongoDB og C# Find()

  2. Geografisk distribuerede MongoDB-klynger på AWS i EU-regionen

  3. Håndtering af raceforhold og sult, når der genereres unikke ID'er ved hjælp af MongoDB + NodeJS

  4. Hvordan løser man mongoDB-relateret problem effektivt?