Det er egentlig lidt bredt, men jeg kan tilbyde de brede træk. Fra og med MongoDB bruger samlingsniveaulåsning med standardlagringsmotoren. Der er også WiredTiger-lagringsmotoren tilgængelig, som implementerer dokumentniveaulåsning . Men dybest set i alle udgivelser er der en vis grad af "låsning", der sker på hver anmodning. Jo finere niveau, jo bedre afhængigt af dine faktiske gennemstrømningsbehov.
I bund og grund sker der ikke to anmodninger på samme tid, da de vil "blokere" på låsen, der er lavet, indtil den frigives. Så den værdi, der ville blive returneret (f.eks. en findAndModify()
request ), ville være fra den "aktuelle tilstand" for det tidspunkt, hvor anmodningen blev fremsat.
Så på en sådan anmodning ville den sætning, der blev udført først, returnere en værdi på 2, og den næste udførte sætning ville returnere en værdi på 3. Slutpositionen i databasen er, at værdien i øjeblikket ville være 3.
Så der er ingen måde noget kan "modificere" på samme tid, og sluttilstanden ville være den, der opstår efter "alle" anmodninger er blevet udstedt. Så $inc
og andre operatører gør præcis, som de skal, og ændrer indholdet baseret på dokumentets tilstand på det tidspunkt, hvor det faktisk var i stand til at få adgang til det.