我想发布一系列帖子以及每篇帖子有多少条评论。我一直在使用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
中的任何字段。我只需要知道每个numComments
post
。如果它是一个普通数组,我会_.extend()
post
对象,但由于你必须返回一个cursor
对象,我不确定最好的方法是什么。
目前,我正在考虑将field
的{{1}}限制为只包含其comment
并将其与_id
一起返回。
答案 0 :(得分:0)
为了减少需要通过网络传输的数据量,同时保留在客户端上统计评论的功能,您可以限制从Comments
集合中返回的字段数量:
children: [
{
find: function (post) {
return Comments.find({ postId: post._id },{ fields: { _id: 1 }});
}
}
]
或者,您可以在numComments
集合中加入Posts
密钥,并在添加评论时将其保持最新。