如何阅读依赖于Meteor中另一个集合的集合

时间:2013-11-11 18:41:51

标签: mongodb meteor

我正在尝试从一个集合中加载最新的帖子,同时加载同一篇文章的所有评论。该集合具有引用,而不是将整个文档存储在彼此内:

Post { title, body, etc..}
Comment { postId, body, etc.. }

我正在使用铁路由器作为路由包,在我的页面路径中我用这种方式订阅:

this.route('home', {
    path: '/',
    template: 'home',
    waitOn: function () {
        return [
            Meteor.subscribe('latestPost'),
            Meteor.subscribe('lastReadPost')
            ];
    }
});

检索帖子的代码只是:

Posts.findOne({}, {sort:{createdAt:-1, limit:1}});

现在的问题是我不知道如何在不阅读整个集合的情况下检索注释。我无法订阅路由器,因为我仍然没有帖子ID来查询评论集合。 我猜我可以从模板中做到这一点,但当然如果我查询Comments集合,它仍然是空的。但我确实拥有postId,因为它当时位于Posts集合中。但我需要从模板触发订阅,这听起来不像是一个干净的解决方案。

最佳做法是什么?谢谢!

2 个答案:

答案 0 :(得分:1)

服务器端代码:

Meteor.publish("latestPost", function () {
  var post = Posts.find({}, {sort:{created:-1}}).fetch()[0];
  console.log("publish : " + post.title);
  return [
    Posts.find({_id: post._id}),
    Comments.find({postId: post._id})
  ];
});

客户端代码:

 this.route('home', {
    path: '/',
    template: 'home',
    waitOn: function () {
      return [
        Meteor.subscribe('latestPost')
      ];
    },
    data:function(){
      return {
       post:Posts.findOne(),
       comments:Comments.find()
      };
    }
   });

选中 repository 以查看整个示例。

用户更改为其他路线后,将自动停止订阅。

答案 1 :(得分:0)

我还会在服务器端查找器选项中包含一个限制

{sort:{created:-1},limit:1}