Meteor - Publish just the count for a collection

后端 未结 3 2078
太阳男子
太阳男子 2021-02-20 00:52

Is it possible to publish just the count for a collection to the user? I want to display the total count on the homepage, but not pass all the data to the user. This is what I t

3条回答
  •  时光说笑
    2021-02-20 01:36

    Meteor.publish functions should return cursors, but here you're returning directly a Number which is the total count of documents in your Tasks collection.

    Counting documents in Meteor is a surprisingly more difficult task than it appears if you want to do it the proper way : using a solution both elegant and effective.

    The package ros:publish-counts (a fork of tmeasday:publish-counts) provides accurate counts for small collections (100-1000) or "nearly accurate" counts for larger collections (tens of thousands) using the fastCount option.

    You can use it this way :

    // server-side publish (small collection)
    Meteor.publish("tasks-count",function(){
      Counts.publish(this,"tasks-count",Tasks.find());
    });
    
    // server-side publish (large collection)
    Meteor.publish("tasks-count",function(){
      Counts.publish(this,"tasks-count",Tasks.find(), {fastCount: true});
    });
    
    // client-side use
    Template.myTemplate.helpers({
      tasksCount:function(){
        return Counts.get("tasks-count");
      }
    });
    

    You'll get a client-side reactive count as well as a server-side reasonably performant implementation.

    This problem is discussed in a (paid) bullet proof Meteor lesson which is a recommended reading : https://bulletproofmeteor.com/

提交回复
热议问题