Meteor发布的帖子及其评论数量

Meteor发布的帖子及其评论数量,meteor,Meteor,我想发布一系列帖子,以及每篇帖子有多少评论。我一直在以以下方式使用publishComposite: Meteor.publishComposite('postsAndComments', function (limit) { var user = Meteor.users.findOne({_id: this.userId}); return { find: function() { if (!this.userId) { return;

我想发布一系列帖子,以及每篇帖子有多少评论。我一直在以以下方式使用publishComposite:

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混合使用,但可以给您一个想法:发布一个只包含计数的集合。