パブリッシュ機能の内部にサーバーに一時的な余分なフィールドを追加する方法はありますか?私は観察したり、変換したりすることができないようです。
私は同じコレクション 'リスト'の2つのサブスクリプションを持っています。チャットルームリストで利用できるように、特定のリストを購読したいときがありますが、問題は私の 'リスト'テンプレートに表示されていることです。一意の部分は、パフォーマンス(大きな配列)のためにサーバー上にありました。
理想的には、 'forChat:true'のような余分なフィールドを追加して、リスティングテンプレートでそれをチェックし、 'forChat'フィールドを持たないリスティングのみを取得できるようにしたいと考えています。
現在、私はリスティングテンプレートがユーザーのIDがその内部にあるかどうかをチェックできるように、各リスティングの「好き」配列を送信して回避しています。しかし、これは長さ〜=(users/2)のために時間とともに(そしてモバイルで)うまく拡大縮小されません。
// ideal-ish pseudo code if we could return arrays:
Meteor.publish('chats', function(id) {
lists = Listings.find(...).fetch();
return lists.map(function(list){
return list.forChat = true;
});
});
これも可能ですか?ハッキーのようなものですが、すべてのリストにフィールドを追加して残りの出版物で省略できると思います。
以下の受け入れられた答えからの作業コード:
Meteor.publish('listingsForChats', function(id) {
var cursor = Listings.find(...);
// insert a temp `forChats:true` field to filter in listings template
cursor.forEach(function(doc) {
doc.forChats = true;
this.added('listings', doc._id, doc);
}, this);
this.ready();
});