Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Does updating a MongoDB record rewrites the whole record or only the updated fields?

Tags:

mongodb

I have a MongoDB collection as follows:

comment_id (number)
comment_title (text)
score (number)
time_score (number)
final_score (number) 
created_time (timestamp)

Score is and integer that's usually updated using $inc 1 or -1 whenever someone votes up or down for that record. but time_score is updated using a function relative to timestamp and current time and other factors like how many (whole days passed) and how many (whole weeks passed) .....etc

So I do $inc and $dec on db directly but for the time_score, I retrieve data from db calculate the new score and write it back. What I'm worried about is that in case many users incremented the "score" field during my calculation of time_score then when I wrote time_score to db it'll corrupt the last value of score.

To be more clear does updating specific fields in a record in Mongo rewrites the whole record or only the updated fields ? (Assume that all these fields are indexed).

like image 487
Shehabic Avatar asked Dec 13 '25 18:12

Shehabic


1 Answers

By default, whole documents are rewritten. To specify the fields that are changed without modifying anything else, use the $set operator.

Edit: The comments on this answer are correct - any of the update modifiers will cause only relevant fields to be rewritten rather than the whole document. By "default", I meant a case where no special modifiers are used (a vanilla document is provided).

like image 71
shelman Avatar answered Dec 15 '25 14:12

shelman



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!