Pole Meteor, One to Many Relationship & add tylko do kolekcji po stronie klienta w Publish?

Czy ktoś może zobaczyć, co może być nie tak w tym kodzie, zasadniczo chcę sprawdzić, czy post został udostępniony przez bieżącego zalogowanego użytkownika I dodać pole tymczasowe do kolekcji po stronie klienta: isCurrentUserShared.

Działa to po raz pierwszy przy ładowaniu nowej strony i wypełnianiu istniejących jednostek uczestnictwa lub przy dodawaniu LUB usuwaniu rekordu do kolekcji udziałów TYLKO po raz pierwszy po załadowaniu strony.

1) isSharedByMe zmienia tylko stan 1 raz, a wywołania zwrotne nadal są wywoływane jako na console.log, ale isSharedByMe nie jest aktualizowany w kolekcji Postów po pierwszym dodaniu lub usunięciu rekordu. Działa po raz pierwszy.

2) Dlaczego wywołania zwrotne są wywoływane dwa razy z rzędu, tj. Dodanie 1 rekordu do Sharescollection wyzwala 2 wywołania, tak jak pokazuje to 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();
});

questionAnswers(3)

yourAnswerToTheQuestion