16

わかりました、引き続きおもちゃのアプリで、自動車所有者の走行距離計のグループの平均走行距離を調べたいと思います。これはクライアントでは非常に簡単ですが、スケーリングしません。右?しかし、サーバーでは、それを達成する方法が正確にはわかりません。

質問:

  1. サーバーに何かを実装して、それをクライアントで使用するにはどうすればよいでしょうか?
  2. mongo の $avg 集計関数を使用して、最適化された集計関数を活用するにはどうすればよいですか?
  3. または (2) の代わりに、サーバー上でマップ/リデュースを実行し、それをクライアントで利用できるようにするにはどうすればよいですか?

@HubertOG の提案は、Meteor.call を使用することでした。これは理にかなっていて、私はこれを行いました。

# Client side
Template.mileage.average_miles = ->
  answer = null
  Meteor.call "average_mileage", (error, result) ->
    console.log "got average mileage result #{result}"
    answer = result
  console.log "but wait, answer = #{answer}"
  answer

# Server side
Meteor.methods average_mileage: ->
  console.log "server mileage called"
  total = count = 0
  r = Mileage.find({}).forEach (mileage) ->
    total += mileage.mileage
    count += 1
  console.log "server about to return #{total / count}"
  total / count

それはうまくいくように見えますMeteor.callが、私が知る限り非同期呼び出しであり、answer常に null が返されるため、そうではありません。サーバー上のものを処理することは、私が何かを見落としていたに違いない、十分に一般的な使用例のようです。それは何でしょう?

ありがとう!

4

4 に答える 4