【问题标题】:Meteor Publishing posts and their number of commentsMeteor Publishing 帖子及其评论数
【发布时间】:2015-09-21 12:39:16
【问题描述】:

我想发布一系列帖子以及每个帖子有多少个 cmets。我一直在使用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});
        }
      }
    ]
  }
});

这是低效的,因为我不需要来自comments 的任何字段。对于每个post,我只需要知道numComments。如果它是一个普通数组,我会 _.extend() 一个 post 对象,但由于你必须返回一个 cursor 对象,我不确定最好的方法是什么。

目前,我正在考虑将commentfield 限制为仅包含其_id 并将它们与posts 一起返回。

【问题讨论】:

  • 我在此处的代码中看到了一个问题,即您限制了 Posts 的输出,这意味着您永远不会获得“真实”数量的 cmets,而只会获得您发布的数量。正如 Michel 建议的那样,您还应该将字段数量限制为仅需要的字段。还可以看看发布计数包,不幸的是它不能很好地与 publishComposite 混合,但可以给你一个想法:发布一个只有计数的集合。

标签: meteor


【解决方案1】:

为了减少需要通过网络传输的数据量,同时保留对客户端上的 cmets 进行计数的能力,您可以限制从 Comments 集合返回的字段数:

children: [
  {
    find: function (post) {
      return Comments.find({ postId: post._id },{ fields: { _id: 1 }});
    }
  }
]

或者,您可以在您的 Posts 集合中包含一个 numComments 键,并在添加 cmets 时使其保持最新。

【讨论】:

    猜你喜欢
    • 2013-05-13
    • 2015-09-20
    • 1970-01-01
    • 2015-10-11
    • 1970-01-01
    • 1970-01-01
    • 2013-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多