如Meteor docs中所述,如果您仔细阅读, transform
这不是问题的正确解决方案:
文档将在从fetch 或 findOne返回之前通过此函数传递,在传递给 observe、map、forEach、allow 和 deny 的回调之前。转换不适用于observeChanges 的回调或发布函数返回的游标
在出版物中转换文档的正确解决方案是使用像maximum:server-transform这样的包:
$ meteor add maximum:server-transform
Meteor.publishTransformed('allDocsTransformed', function() {
return Docs.find().serverTransform({
extraField: function(doc) {
// use fields from doc if you need to
return 'whatever';
}
});
});
...或通过编写自定义出版物来DIY,您可以在其中与观察者一起处理文档流,如下所示:
function transform(doc) {
doc.extraField = 'whatever';
return doc;
}
Meteor.publish('allDocsTransformed', function() {
const observer = Docs.find({}).observe({
added: (doc) => {
this.added('collectionName', doc._id, transform(doc));
},
changed: (doc) => {
this.changed('collectionName', doc._id, transform(doc));
},
removed: (doc) => {
this.removed('collectionName', doc._id);
}
});
this.onStop(() => observer.stop());
this.ready();
});
无论哪种方式都有效。