路由器级别订阅中的流星计数
Meteor Counts in Router Level Subscription
我有一个订阅 posts
出版物的列表 limit
。
发表
Meteor.publish('posts', function(options) {
check(options, {
sort: Object,
limit: Number
});
var posts = Posts.find({}, options);
return posts;
});
在列表中,我在每个
下都有项目
list.html
{{#each posts}}
{{> postItem}}
{{/each}}
在每个postItem
中,我想统计它的评论数。
我相信上面的代码是
Template.postItem.helpers({
commentsCount: function () {
return Comments.find({postId: this._id }).count();
}
});
问题在于我必须在 posts
出版物中发布所有评论,这确实效率低下。
我想制作一个出版物,我可以在模板级别为每个 postItems
订阅它,只是 return 结果 Counts
我试过 tmeasday:publish-counts
但是我没有弄清楚如何让它在我的情况下工作,或者即使它会在这种情况下使用。
选项 1:在 Posts
集合本身中跟踪评论数。
每次插入新评论时,更新计数器:
Posts.update(
{ _id: String },
{ $inc: { commentsCount: 1 } }
)
这样您就不需要为了获取计数而订阅 Comments
,这将涉及到服务器的多次往返。
选项 2:使用 Meteor.methods
和 Meteor.call
到 return 每个帖子的评论数。将多次往返服务器。
选项 3:使用 aggregation to $group
并计算服务器上的评论数并将其映射回客户端上的帖子。
选项 4:Reactive joins
对于性能和反应性,我强烈推荐选项 #1。
我有一个订阅 posts
出版物的列表 limit
。
发表
Meteor.publish('posts', function(options) {
check(options, {
sort: Object,
limit: Number
});
var posts = Posts.find({}, options);
return posts;
});
在列表中,我在每个
下都有项目list.html
{{#each posts}}
{{> postItem}}
{{/each}}
在每个postItem
中,我想统计它的评论数。
我相信上面的代码是
Template.postItem.helpers({
commentsCount: function () {
return Comments.find({postId: this._id }).count();
}
});
问题在于我必须在 posts
出版物中发布所有评论,这确实效率低下。
我想制作一个出版物,我可以在模板级别为每个 postItems
订阅它,只是 return 结果 Counts
我试过 tmeasday:publish-counts
但是我没有弄清楚如何让它在我的情况下工作,或者即使它会在这种情况下使用。
选项 1:在 Posts
集合本身中跟踪评论数。
每次插入新评论时,更新计数器:
Posts.update(
{ _id: String },
{ $inc: { commentsCount: 1 } }
)
这样您就不需要为了获取计数而订阅 Comments
,这将涉及到服务器的多次往返。
选项 2:使用 Meteor.methods
和 Meteor.call
到 return 每个帖子的评论数。将多次往返服务器。
选项 3:使用 aggregation to $group
并计算服务器上的评论数并将其映射回客户端上的帖子。
选项 4:Reactive joins
对于性能和反应性,我强烈推荐选项 #1。