Snapshot isolation, transactions and locks

I have a problem and I would like some clarification. I have a simple piece of code (a long running transaction) that does the following:

  1. Initiate a transaction
  2. Updates a document (let’s call it A) using findOneAndUpdate
  3. Delay the commit using await new Promise((r) => setTimeout(r, 50000));
  4. After the delay commit the transaction

Interestingly, I get different behaviour when I try to read / update the same document (A) during the delay i.e. after step 2 and before step 4 (no transactions are used here, and this is from another script) . Reading gives no problem however when I try to update it using findOneAndUpdate, there is a delay and I assume its because of the transaction that is in progress.

My questions are as follows:

  1. In MVCC snapshot isolation level, operations like findOneAndUpdate are based on snapshot data right? For example, if the snapshot given in a transaction has a doc with count: 0 , any operations such as the $inc op will operate on that snapshot doc even though there may be already an updated version (from another transaction). In this case the write will fail because its operating on an outdated snapshot right?

  2. Are writes in transactions “flushed” into disk with an updated version number without overwriting previous versions?. For example, if there is a document {count:0, v:0} and a write op in a transaction increments it, it will “flush” a new document {count:0, v:1} into disk. Hence, both {count:0, v:0} and {count:0, v:1} will be stored together right? Also, the writes in transactions are “flushed” into disk immediately and do not need to wait for the commit. The locks are released only after it is committed. Is this understanding correct?

Is this why in a long running transaction (like the one above), reads are not blocked because it simply reads the “latest versioned not-locked” data (aka committed data) while writes can be blocked since it needs to operate on the latest version data but only when its not locked by another transaction?

Sorry if this post is all over the place. I’m a beginner and would like to understand more about this topic. Thanks!