Meteor, One to Many Relationship y agregar el campo solo a la colección del lado del cliente en Publicar?

¿Alguien puede ver lo que puede estar mal en este código? Básicamente, quiero verificar si una publicación ha sido compartida por el usuario actual registrado Y agregar un campo temporal a la colección del lado del cliente: isCurrentUserShared.

Esto funciona la primera vez que se carga una nueva página y se rellena con recursos compartidos existentes, o cuando se agrega O se quita un registro a la colección de recursos compartidos SOLAMENTE la primera vez que se carga la página.

1) isSharedByMe solo cambia el estado 1 vez, luego las llamadas devueltas siguen siendo llamadas según console.log, pero isSharedByMe no se actualiza en la colección de publicaciones después de la primera vez que agrego o elimino un registro. Funciona la 1ª vez.

2) ¿Por qué las devoluciones de llamada se llaman dos veces seguidas, es decir, al agregar 1 registro a Sharescollection se activan 2 llamadas, como se muestra en console.log?

Meteor.publish('posts', function() {

    var self = this;
    var mySharedHandle;


    function checkSharedBy(IN_postId) {
        mySharedHandle = Shares.find( { postId: IN_postId, userId: self.userId }).observeChanges({

            added: function(id) {
                console.log("   ...INSIDE checkSharedBy(); ADDED: IN_postId = " + IN_postId );
                self.added('posts', IN_postId, { isSharedByMe: true });
            },

            removed: function(id) {
                console.log("   ...INSIDE checkSharedBy(); REMOVED: IN_postId = " + IN_postId );
                self.changed('posts', IN_postId, { isSharedByMe: false });
            }
        });
    }


    var handle = Posts.find().observeChanges({

        added: function(id, fields) {
            checkSharedBy(id);
            self.added('posts', id, fields);
        },

        // This callback never gets run, even when checkSharedBy() changes field isSharedByMe.
        changed: function(id, fields) {
            self.changed('posts', id, fields);
        },

        removed: function(id) {
            self.removed('posts', id);
        }
    });

    // Stop observing cursor when client unsubscribes
    self.onStop(function() {
        handle.stop();
        mySharedHandle.stop();
    });

    self.ready();
});

Respuestas a la pregunta(3)

Su respuesta a la pregunta