Publish with observeChange

This is the code snippet from the Meteor API documentation on publish / subscribe.

// server: publish the current size of a collection
Meteor.publish(“counts-by-room”, function (roomId) {
var self = this;
check(roomId, String);
var count = 0;
var initializing = true;

// observeChanges only returns after the initial added callbacks
// have run. Until then, we don’t want to send a lot of
// self.changed() messages - hence tracking the
// initializing state.
var handle = Messages.find({roomId: roomId}).observeChanges({
added: function (id) {
if (!initializing)
self.changed(“counts”, roomId, {count: count});
removed: function (id) {
self.changed(“counts”, roomId, {count: count});
// don’t care about changed

Can I observe changes made to an existing document? In the above example that would mean that an existing Message document’s attribute field(s) change. Is this the correct way to observe a change of an existing document:

var handle = Messages.find({roomId: roomId}).observeChanges({
changed: function (id) {


Also what does the ‘id’ variable refer to in the changed: function(id) line?