Het is relatief eenvoudig om velden privé te houden, zelfs als ze deel uitmaken van de databasequery. Het laatste argument voor self.added
is het object dat aan de client wordt doorgegeven, dus u kunt velden die u naar de client verzendt strippen/wijzigen/verwijderen.
Hier is een aangepaste versie van je viool. Dit zou moeten doen waar je om vraagt. (Om eerlijk te zijn weet ik niet zeker waarom je iets had vastgeketend na de observeChanges
functioneren in je viool, dus misschien begrijp ik je verkeerd, maar als we naar de rest van je vraag kijken, zou dit het moeten zijn. Sorry als ik het verkeerd heb.)
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();
});