2013-02-26 37 views
9

Tôi có một số mã như hình dưới đây. Có khoảng 60 nghìn mục nhập trong bộ sưu tập từ khóa của tôi ở Mongo. Tôi thực sự chỉ muốn 25 đầu, vì vậy tôi đang cố gắng tìm một giới hạn tìm kiếm. Tôi đang chạy cùng một truy vấn để in ra số kết quả của mình. Vì một số lý do, giới hạn dường như không hoạt động vì thông điệp tường trình của tôi cho biết 60K hoặc hơn.Giới hạn số lượng kết quả trong Meteor ở phía máy chủ?

Đây có phải là điều không thể? Tôi có thể đặt giới hạn ở phía máy khách, nhưng tôi nghĩ tôi sẽ cố gắng giới hạn mọi thứ trên máy chủ để ít dữ liệu hơn được gửi đi.

Một vài bit thông tin bổ sung:

  • Tôi đang sử dụng cơ sở dữ liệu Mongo của riêng tôi, không phải là người được cung cấp bởi thiên thạch; chỉ vào nó với biến env
  • phiên bản 0.5.7

Mọi trợ giúp sẽ được đánh giá cao.

if (Meteor.isServer) { 
    Meteor.startup(function() { 
    console.log('server startup'); 

    Meteor.publish("keyword_hits", function() { 
     console.log('keywords: ' + Keywords.find({}, {sort: {count:-1}, limit:25}).count()); 
     return Keywords.find({}, {sort: {count:-1}, limit:25}); 
    }); 
}); 
+4

Ah Tôi nghĩ mình đã tìm thấy nó, tôi đã tự mình sử dụng trường _id. Tôi đã thay đổi mã của mình để sử dụng mặc định và mọi thứ dường như hoạt động ngay bây giờ. Tôi sẽ nhớ để lại _id một mình khi sử dụng thiên thạch. –

+6

Xin chào Eric, Bạn có nhớ dán giải pháp này làm câu trả lời và đóng câu hỏi không? Hay bạn vẫn cần trợ giúp với nó? – cmather

+0

Một điều tôi nhận thấy là bạn đang phân loại trong câu lệnh console.log của mình. Không có lý do để sắp xếp nếu bạn chỉ làm đếm. –

Trả lời

16

Với API Mongo rằng Meteor đi kèm với, .count() không đi vào xem xét Limits, hoặc Skips vì vậy những gì bạn nhìn thấy là sẽ luôn là số tiền tối đa của sự vật trong bộ sưu tập của bạn.

Nếu bạn làm

Meteor.publish("keyword_hits", function() { 
     console.log('keywords: ' + Keywords.find({}, {sort: {count:-1}, limit:25}).fetch().length); 
     return Keywords.find({}, {sort: {count:-1}, limit:25}); 
}); 

Vì vậy, thay vì gọi .count() và thay vào đó bạn gọi, .fetch() mà trả về chọn 25 mục từ bộ sưu tập của bạn, sau đó gọi .length vào nó, bạn sẽ thấy những con số chính xác các mục đã trả lại.

Tôi thực sự đã mở ra một vấn đề về .count() vì trong Mongo bình thường bạn có thể làm: .count({'applySkipLimit': true}); sẽ tính đến, bỏ qua và giới hạn của bạn.

Dù sao, đó là vấn đề của bạn.

Các vấn đề liên quan