Meteor发布的帖子及其评论数量
我想发布一系列帖子,以及每篇帖子有多少评论。我一直在以以下方式使用publishComposite:Meteor发布的帖子及其评论数量,meteor,Meteor,我想发布一系列帖子,以及每篇帖子有多少评论。我一直在以以下方式使用publishComposite: Meteor.publishComposite('postsAndComments', function (limit) { var user = Meteor.users.findOne({_id: this.userId}); return { find: function() { if (!this.userId) { return;
Meteor.publishComposite('postsAndComments', function (limit) {
var user = Meteor.users.findOne({_id: this.userId});
return {
find: function() {
if (!this.userId) {
return;
}
return Posts.find({
networkId: user.networkId
}, {
sort: {createdAt: -1},
limit: limit
});
},
children: [
{
find: function (post) {
return Comments.find({postId: post._id});
}
}
]
}
});
这是低效的,因为我不需要任何来自注释的字段。我只需要知道每个帖子的numComments
。如果它是一个普通数组,我会\uuuu.extend()
目前,我正在考虑限制评论的字段
仅包含其\u id
,并将其与帖子一起返回
,以减少需要通过网络传输的数据量,同时保留计算客户端评论的能力,您可以限制从注释
集合返回的字段数:
children: [
{
find: function (post) {
return Comments.find({ postId: post._id },{ fields: { _id: 1 }});
}
}
]
或者,你可以在你的Posts
集合中包含一个numComments
键,并在添加评论时保持该键的最新状态。我在这里看到一个问题,即你限制了帖子的输出,这意味着你永远不会得到“真实”数量的评论,而只会得到你发布的数量。正如Michel所建议的,您还应该将if字段的数量限制为只包含您需要的字段。另请看一下publish counts包,它正好可以做到这一点,不幸的是,它不能很好地与publishComposite混合使用,但可以给您一个想法:发布一个只包含计数的集合。