Relatif mudah untuk menjaga kerahasiaan bidang meskipun itu adalah bagian dari kueri basis data. Argumen terakhir untuk self.added
adalah objek yang diteruskan ke klien, sehingga Anda dapat menghapus/memodifikasi/menghapus bidang yang Anda kirim ke klien.
Ini adalah versi modifikasi dari biola Anda. Ini harus melakukan apa yang Anda minta. (Sejujurnya saya tidak yakin mengapa Anda memiliki sesuatu yang dirantai setelah observeChanges
berfungsi di biola Anda, jadi mungkin saya salah paham dengan Anda, tetapi melihat sisa pertanyaan Anda, ini seharusnya. Maaf kalau salah.)
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();
});