如何处理与MongoDB / Meteor的“关系”

时间:2015-05-10 14:55:59

标签: javascript mongodb meteor

我仍然在我的Meteor.js应用程序上,并希望在我的页面上显示当前用户朋友的所有帖子。

目前,我只是像这样展示每一篇文章:

talkthreads: function(){
  return Posts.find({parent: null},{sort: {date: -1}});
}

但我想做一些尽可能简单/有效的事情来过滤它们,并且只有来自用户朋友的那个。

类似的东西:

talkthreads: function(){
        return Posts.find({parent: null, owner: [match one of my friend id]}, {sort: {date: -1}});
    }

正如我对SQL所做的那样。

另一点是我目前将我的帖子集合发布给所有客户端。但由于它的目标是随着时间的推移而增长,我不想将所有帖子发布给每个客户。

我如何才能发布和订阅我或我朋友所拥有的帖子,而且数量有限:我不想一次加载超过15个帖子。当我点击一个按钮时,我再加载15个(就像在FB上一样,当你在页面底部滚动时,它会自动添加较旧的帖子)。

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

您要求的是客户端加入。假设Meteor.user().profile.friends是一个用户ID数组,这样的东西应该在你的帮助器中起作用:

talkthreads: function() {
  // select owners who are friends of the current user
  // see the publish example if you want to include your own posts
  var owners = Meteor.user().profile.friends || [];

  var selector = {
    parent: null,
    owner: {$in: owners}
  };

  return Posts.find(selector, {sort: {date: -1}});
}

你问题的后半部分是关于分页的。这可能是一个单独的问题最好的问题,但是这里有关于如何设置发布者的想法:

var POSTS_PER_PAGE = 15;

Meteor.publish('paginatedPosts', function(pageNumber) {
  // fetch the current user because Meteor.user() isn't available here
  var user = Meteor.findOne(this.userId);

  // get an array of user ids for the user's friends
  var owners = user.profile.friends || [];

  // also add the current userId to the list of owners
  owners.push(this.userId);

  var selector = {
    parent: null,
    owner: {$in: owners}
  };

  // publish a limited set of posts based on the current page
  var options = {
    limit: POSTS_PER_PAGE * pageNumber,
    sort: {date: -1}
  };

  return Posts.find(selector, options);
});

在客户端上,您需要跟踪当前页面(从1开始并在每次单击&#34时增加;加载更多"按钮)并在页面时激活订阅数字变化。例如:

Tracker.autorun(function() {
  var pageNumber = Session.get('currentPage') || 1;
  Meteor.subscribe('paginatedPosts', pageNumber);
});

当然,这可能是模板自动运行,全局或路由器,具体取决于对您的应用有意义的内容。

答案 1 :(得分:1)

我假设您的用户有一系列朋友_id,您可以使用它们进行查询。在这种情况下,您正在寻找这样的查询:

 Posts.find({parent: null, owner: Users.find({_id: user_is}, {friends: 1, _id: 0})}, {sort: {date: -1}});

基本上使用Mongo,您可以嵌套搜索,这样就可以获得所需的数据。