sql >> Databasteknik >  >> NoSQL >> MongoDB

Skriver MongoDB $set bara fältet eller hela dokumentet?

TL;DR:$inc garanterar uppdateringar på plats, $set inte, men under mycket specifika omständigheter kan det också göras på plats.

Detaljer

Det finns två aspekter av detta:

  1. hur går det över tråden?

    Informationen skickas som en operation, en $set förblir en $set så det är ett delta. Det är också sant för oploggen som används för replikering. På detta sätt använder du $set är effektivare med avseende på bandbredd.

  2. hur uppdateras den på disken?

    MongoDB utför en uppdatering på plats om och bara om nyckeln (fältet) redan finns , så när du lägger till ett nytt fält i ett dokument är det en större operation än att bara tilldela ett annat värde till ett befintligt fält.

    Även då måste dock värdena ha samma storlek och får inte ändra typ och de måste vara av typen double, long, int or bool , annars är det inte en uppdatering på plats för närvarande.

Jag är inte säker på hur det senare är riktigt viktigt i praktiken , men servern använder definitivt helt olika kodsökvägar för de två, så det kan till exempel leda till fältomordning. För mycket stora dokument kommer det förmodligen att resultera i en mätbar skillnad i prestanda.

Detta visar att $inc är väldigt annorlunda genom att det bara tillåter operationer som säkert är på plats, eftersom $inc fungerar bara på numeriska typer och kan naturligtvis inte ändra storlek eller typ.



  1. Flera fält där nycklar i dokument varierar Genomsnittlig aggregation

  2. Hur man ställer in återuppringning i mongoose, i en global variabel

  3. Hur man plattar ut dynamiskt fält med överordnat dokument - Spring data Mongo DB

  4. redis-py :Vad är skillnaden mellan StrictRedis() och Redis()?