代码之家  ›  专栏  ›  技术社区  ›  Mohammad Khojaly

流星:如何建立一对多的关系?

  •  2
  • Mohammad Khojaly  · 技术社区  · 9 年前

    我正在尝试创建一个像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 回复  |  直到 9 年前
        1
  •  3
  •   Stephen Woods    9 年前

    将您的追随者行更改为:

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

    我所做的更改:

    1. 改变 followers: user follower:user 因为我在你的followers集合中没有看到followers属性。
    2. 添加了 fetch() 在您的 find() 查询以返回数组而不是光标。
    3. 习惯于 .map() 将对象数组转换为用户名字符串数组以发送到帖子。
    推荐文章