流星:如何使关系成为一对多?

时间:2016-01-29 16:57:57

标签: javascript node.js meteor relationships

我正在尝试创建像twitter这样的关注者系统,我想只为以下用户显示帖子。 我不确定我的发布代码。

我有两个系列:

1- Posts {
  "_id": "3HrXtbHZ8WqHJJpyC",
  "post": " some text",
  "owner": "Wdc84ED9zt4Ssxsh4",
  "username": "MJK",
  "createdAt": "2016-01-28T11:53:33.253Z"
}

2- Follwers {
  "_id": "ShKWgeaP9BFPuQWwL",
  "follower": "MJK",
  "following": "michael"
}

发布代码

Meteor.publish('posts', function() {
  var user = Meteor.users.findOne({_id: this.userId}).username;
  var follower = Followers.find({followers: user}).following;
  var posts = Posts.find({username: {$in: follower}});
  return posts;
});

订阅

Meteor.subscribe('posts');

客户代码

Template.content.helpers({
  'posts': function(){
    return Posts.find({}, {sort:{createdAt: -1}});
  }
});

HTML

{{#each posts}}
<li class="collection-item avatar">
  <span class="title"><a href="/{{username}}">{{posts.username}}</a></span>
  <p>{{time}}
{{post}}
{{/each}}

但浏览器中没有帖子。 我认为我的发布代码是错误的。有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:2)

将您的关注行更改为:

var follower = Followers.find({follower: user}).fetch().map(function(follower) {
    return follower.following;
});

我所做的改变:

  1. followers: user更改为follower:user,因为我在“关注者”集合中找不到关注者属性。
  2. fetch()查询后添加find()以返回数组而不是游标。
  3. 使用.map()将您的对象数组转换为用户名字符串数组,以便提供给帖子。
相关问题