É relativamente fácil manter os campos privados, mesmo que façam parte da consulta do banco de dados. O último argumento para
self.added
é o objeto que está sendo passado para o cliente, então você pode remover/modificar/excluir os campos que está enviando para o cliente. Aqui está uma versão modificada do seu violino. Isso deve fazer o que você está pedindo. (Para ser honesto, não sei por que você tinha algo encadeado após o
observeChanges
function no seu violino, então talvez eu esteja entendendo mal, mas olhando para o resto da sua pergunta, deve ser isso. Desculpe se eu entendi errado.) 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();
});