Using withAtomicIncrements will help ensure consistency on numeric fields where the new value is dependent on the existing one.
For example, let's say you have a pot that multiple users were updating regularly. The value of the pot is currently 100. If player1 wants to increase it by 2 and so persists a value of 102, the current value of the pot is overwritten. However, if they persist the value of 102 withAtomicIncrements the value isn't overwritten; instead the difference between the supplied and existing values is calculated and the existing value is incremented/decremented to bring it in-line with the supplied value.
Where this becomes really useful is when you have multiple players operating on the field at the same time. Let's say player2 wanted to increase the value by 5, so persisted a value of 105 at the same time as player1's operation. With a standard 'persist' you'd end up with a value of either 102 or 105, depending on which operation completed last. But withAtomicIncrements you'll end up with a value of 107, because the two operations will have first obtained the existing value (100), and calculated that they needed to increment it by 2 and 5 respectively.
For withVersionCheck this means that the version of the document will be checked before the persist is performed. The document version is updated automatically every time the document is changed in the db. So if you get an item, and then try to persist it with version check; the persist will fail if the document has been updated (by another user/script) since you got it, returning false. This is used to ensure that the document you're trying to operate on is up to date before it will allow you to update it.
For example, let's say you have a pot that multiple users were updating regularly. The value of the pot is currently 100. If player1 wants to increase it by 2 and so persists a value of 102, the current value of the pot is overwritten. However, if they persist the value of 102 withAtomicIncrements the value isn't overwritten; instead the difference between the supplied and existing values is calculated and the existing value is incremented/decremented to bring it in-line with the supplied value.
Where this becomes really useful is when you have multiple players operating on the field at the same time. Let's say player2 wanted to increase the value by 5, so persisted a value of 105 at the same time as player1's operation. With a standard 'persist' you'd end up with a value of either 102 or 105, depending on which operation completed last. But withAtomicIncrements you'll end up with a value of 107, because the two operations will have first obtained the existing value (100), and calculated that they needed to increment it by 2 and 5 respectively.
For withVersionCheck this means that the version of the document will be checked before the persist is performed. The document version is updated automatically every time the document is changed in the db. So if you get an item, and then try to persist it with version check; the persist will fail if the document has been updated (by another user/script) since you got it, returning false. This is used to ensure that the document you're trying to operate on is up to date before it will allow you to update it.