Det er relativt nemt at holde felter private, selvom de er en del af databaseforespørgslen. Det sidste argument til self.added
er objektet, der sendes til klienten, så du kan fjerne/ændre/slette felter, du sender til klienten.
Her er en modificeret version af din violin. Dette bør gøre, hvad du beder om. (For at være ærlig er jeg ikke sikker på, hvorfor du havde noget lænket efter observeChanges
funktion i din violin, så måske jeg misforstår dig, men ser på resten af dit spørgsmål, burde det være det. Beklager, hvis jeg tog fejl.)
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();
});