Yay, first reply.
Let's say 'movies' is version 1.
Then I do 'movies'.update({}, { $set: { blah: 'blah' }}), and when this update applies the 'movies' version becomes 2.
If I was querying 'movies' while it was being updated, I'd get stale results, but I'd also have means to detect this stallness, because the 'movies'.find({}) query would also return { ..., version: 1 }.
Then, on the client, I'd periodically (say, once in 10 seconds) query the current version of 'movies', and if it's greater than mine, I'd request partial updates for missing versions.
In this case I'd request a partial update = "
'movies'.update({}, { $set: { blah: 'blah' }}) ".
You are right here - this technique would require parsing MongoDB expression language, but this task is manageable as long as the update queries stay simple.
So, then, in the browser, I would reapply this update on the <ul/> element of the movies displayed on the page, and, therefore, have the exact copy of the data which resides on the MongoDB server.
I have already thought about an "updatedAt" property, but, since I should use pagination on the client, the fetched batch of data can have old "updatedAt" values and some far-far-away 'movie' would have a fresh "updatedAt" value, and I would never know that since that freshly-updated movie just isn't in the query results for now.
Thanks for the link on "rtsdemo". I haven't heard about it and I'll read it tomorrow.
As for the Meteor framework, I've heard about it, but I'm kinda sceptic about it, since it just got a couple of million dollars investments (if i'm not mistaken).
I'm usually sceptic about all the 'frameworks'.
Maybe because I just prefer writing my own :)