Ponechat pole soukromá, i když jsou součástí databázového dotazu, je poměrně snadné. Poslední argument pro self.added
je objekt předávaný klientovi, takže můžete odstranit/upravit/smazat pole, která posíláte klientovi.
Zde je upravená verze vašich houslí. To by mělo dělat to, co požadujete. (Abych byl upřímný, nejsem si jistý, proč jste měli něco po observeChanges
funkce ve vašich houslích, takže vám možná nerozumím, ale při pohledu na zbytek vaší otázky by to mělo být ono. Omlouvám se, pokud jsem to pochopil špatně.)
var self = this;
// Modify the document we are sending to the client.
function filter(doc) {
var length = doc.item.length;
// White list the fields you want to publish.
var docToPublish = _.pick(doc, [
'someOtherField'
]);
// Add your custom fields.
docToPublish.itemLength = length;
return docToPublish;
}
var handle = myCollection.find({}, {fields: {item:1, someOtherField:1}})
// Use observe since it gives us the the old and new document when something is changing.
// If this becomes a performance issue then consider using observeChanges,
// but its usually a lot simpler to use observe in cases like this.
.observe({
added: function(doc) {
self.added("myCollection", doc._id, filter(doc));
},
changed: function(newDocument, oldDocument)
// When the item count is changing, send update to client.
if (newDocument.item.length !== oldDocument.item.length)
self.changed("myCollection", newDocument._id, filter(newDocument));
},
removed: function(doc) {
self.removed("myCollection", doc._id);
});
self.ready();
self.onStop(function () {
handle.stop();
});