I think what you're describing here is something that is often overlooked. You are treating the same data in 2 ways - events and entities and there's an important distinction.
The events come in and you store them. They are immutable descriptions with a timestamp which provides sequence. There is no relation between any 2 events.
Then you keep another collection of entities which you call "sessions". These comb through the event data and combine them into sessions which can answer different questions.
The event data is the authoritative source and because there are timestamps they are sequenced. This way you can generate session from them and if anything were to happen to make the session collection invalid you can "rollback" to a certain point in time and recalculate the sessions from there.
In the NoSQL world you often want to begin with "events". And then form "entities" from the sequence of events that are useful to you. Because you've stored every action you can always go back and recalculate and create new entities you hadn't yet discovered.