【发布时间】: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 对象,我不确定最好的方法是什么。
目前,我正在考虑将comment 的field 限制为仅包含其_id 并将它们与posts 一起返回。
【问题讨论】:
-
我在此处的代码中看到了一个问题,即您限制了 Posts 的输出,这意味着您永远不会获得“真实”数量的 cmets,而只会获得您发布的数量。正如 Michel 建议的那样,您还应该将字段数量限制为仅需要的字段。还可以看看发布计数包,不幸的是它不能很好地与 publishComposite 混合,但可以给你一个想法:发布一个只有计数的集合。
标签: meteor