Ok, vẫn còn trong ứng dụng đồ chơi của tôi, tôi muốn tìm ra số dặm trung bình trên một nhóm đồng hồ đo của chủ xe. Điều này khá dễ dàng trên máy khách nhưng không mở rộng. Đúng? Nhưng trên máy chủ, tôi không thấy chính xác cách thực hiện nó.Truy vấn tập hợp trung bình trong Meteor
Câu hỏi:
- Làm thế nào để bạn thực hiện một cái gì đó trên máy chủ sau đó sử dụng nó trên máy khách?
- Làm cách nào để bạn sử dụng hàm tổng hợp $ avg của mongo để tận dụng chức năng tổng hợp được tối ưu hóa của nó?
- Hoặc cách khác để (2) làm thế nào để bạn làm một bản đồ/giảm trên máy chủ và làm cho nó có sẵn cho khách hàng?
Các gợi ý bởi @HubertOG là sử dụng Meteor.call, có ý nghĩa và tôi đã làm điều này:
# 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
Điều đó dường như làm việc tốt, nhưng nó không phải vì như gần như tôi có thể cho biết Meteor.call
là cuộc gọi không đồng bộ và answer
sẽ luôn là số không trả lại. Xử lý các công cụ trên máy chủ có vẻ giống như một trường hợp sử dụng đủ phổ biến mà tôi phải có chỉ cần bỏ qua một cái gì đó. Điều đó sẽ là gì?
Cảm ơn!
Tôi không muốn để lại câu trả lời này mà không có một "cảm ơn bạn". Đó là một câu trả lời hoàn toàn tuyệt vời. Tôi đã bị lôi kéo vào một dự án khác tạm thời, nhưng Andrew, bạn rõ ràng đã đặt rất nhiều suy nghĩ vào điều này và tôi rất cảm kích. –
@SteveRoss bạn được chào đón. Cảm ơn những lời tốt đẹp! –
Kudo cho ví dụ tổng hợp tuyệt vời. Đó là người duy nhất làm việc cho tôi. Và bạn đã quản lý nó mà không cần gói, với MongoInternals, và trong một chức năng xuất bản ... đóng băng trên chiếc bánh nhung đỏ. Cảm ơn bạn đã chia sẻ! – AbigailW