This is more a discussion, because I am interested in the following question:
I have an application with event sourcing and a common query is the following
“Give me every event since [POSITION]”. So position is an value that indicates the position of the event in a global event stream. In the SQL world you would use an auto-incremented integer for that to have an increasing position, in MongoDB this is of course not possible.
You cannot use a normal client side generated timestamp because you have no guarantee that the document A has has a lower timestamp than document B is actually written before B.
Therefore I use BsonTimestamp which is generated on the database server and fulfills this purpose. But it happens very regularly that after you queried some document from the event collection another event is written that has a smaller timestamp than what you actually received from the server. So the insert order is actually not consistent with the bson timestamps.
I wonder how you have solved that with oplogs, because you must have the same issue. My current solution is to have an overlapping window, so instead of “Give me every event since [POSITION]” I ask “Give me every event since [POSITION] and a little bit before that”, but there is no guarantee that it works all the time.