发布/订阅同一集合的多个字段选择

时间:2014-07-25 11:52:52

标签: collections meteor publish-subscribe

我有一个包含嵌入式注释数据的帖子集合。 在每个帖子视图页面中,我需要发布2个游标:一个女巫包含所有帖子,没有他们的评论字段(表现)在一些小部件中显示,另一个女巫包含所选帖子及其评论。服务器端代码如下:

Meteor.publish('allPosts', function() {
  return Posts.find({}, {fields: {'comments':0}})
})
Meteor.publish('singlePost', function(slug) {
  return Posts.find({slug: slug})
})

在帖子视图模板中,我订阅了这两个,但是当我使用

Posts.findOne({slug: slug})

我怎么知道使用女巫发布光标?我怎么选择一个?

1 个答案:

答案 0 :(得分:2)

在客户端上查询Posts时,您正在查询该集合上所有活动订阅的并集。在这种情况下,如果您使用该特定singlePost订阅了slug,您将获得完整的文档。如果还没有,你就不会得到评论。

另一个例子:

Meteor.publish("allSummaries", function () {
  return Posts.find({}, {fields: {title: 1, date: 1}});
});
Meteor.publish("myPosts", function () {
  return Posts.find({creator: this.userId}, {fields: {title: 1, rating: 1}});
});
Meteor.publish("singlePost", function (_id) {
  return Posts.find({_id: _id}, {fields: {title: 1, body: 1});
});

假设一个客户端使用userId" me"订阅了allSummariesmyPostssinglePost_id的" 3")。该集合包含以下文档:

{_id: "1", title: "Post 1", date: "yesterday", creator: "someone else", rating: 3}
{_id: "2", title: "Post 2", date: "today", creator: "me", rating: 4}
{_id: "3", title: "Post 3", date: "5 days ago", creator: "someone else", rating: 2}

对于帖子1,客户端只会看到titledate(和_id) - 从allSummaries发布 - 但没有其他内容。对于帖子2,他们会看到titledaterating - date来自allSummariestitle来自allSummaries myPosts来自rating的1}}和myPosts以及title。对于第3篇文章,他们会看到datebodyrating,但不是{{1}}。