他の回答で言及されている変換をラップするには、私が開発したパッケージmeteor-middlewareを使用できます。これには、プラグイン可能な優れた API が用意されています。したがって、変換を提供するだけでなく、それらを積み重ねることができます。これにより、コードの再利用、パーミッション チェック (パーミッションに基づくフィールドの削除または集約など) などが可能になります。したがって、必要な方法でドキュメントを集約できるクラスを作成できます。
ただし、特定のケースでは、 MongoDB 集計パイプラインを調べたい場合があります。本当にたくさんの単語がある場合、それらすべてを MongoDB サーバーから Meteor サーバー側に転送したくないでしょう。一方、集約パイプラインには、必要な反応性がありません。そのため、公開されたドキュメントの変更は、単語の出入りに応じてカウントされます。
私が開発した別のパッケージPeerDBを使用できることに対処するために。データの変更としてリアクティブに呼び出され、データベースに保存されるトリガーを指定できます。次に、通常の発行を使用して、カウントをクライアントに送信するだけです。欠点は、すべてのユーザーが同じコレクションに関心を持つ必要があることです。ユーザーごとではなく、グローバルに機能します。しかし、コレクション全体の単語数に関心がある場合は、(CoffeesScript で) 次のようにすることができます。
class WordCounts extends Document
@Meta
name: 'WordCounts'
class Words extends Document
@Meta
name: 'Words'
triggers: =>
countWords: @Trigger ['word'], (newDocument, oldDocument) ->
# Document has been removed.
if not newDocument._id
WordCounts.update
length: oldDocument.word.length
,
$inc:
count: -1
# Document has been added.
else if not oldDocument._id
WordCounts.update
length: newDocument.word.length
,
$inc:
count: 1
# Word length has changed.
else if newDocument.word.length isnt oldDocument.word.length
WordCounts.update
length: oldDocument.word.length
,
$inc:
count: -1
WordCounts.update
length: newDocument.word.length
,
$inc:
count: 1
そして、単純にWordCounts
ドキュメントを公開できます:
Meteor.publish 'counts', ->
WordCounts.documents.find()