流星:如何建立一对多的关系?
Meteor : how to make Relationships one to many?
我正在尝试创建一个像 twitter 这样的关注者系统,我想只为关注的用户显示帖子。
我不确定我的发布代码。
我有 2 个合集:
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}}
但是浏览器中没有显示任何帖子。
我认为我的发布代码是错误的。谁能帮帮我?
将您的关注行更改为:
var follower = Followers.find({follower: user}).fetch().map(function(follower) {
return follower.following;
});
我所做的修改:
- 已将
followers: user
更改为 follower:user
,因为我在您的关注者集合中没有看到关注者 属性。
- 在
find()
查询后添加 fetch()
到 return 数组而不是游标。
- 使用
.map()
将您的对象数组转换为用户名字符串数组以提供给帖子。
我正在尝试创建一个像 twitter 这样的关注者系统,我想只为关注的用户显示帖子。 我不确定我的发布代码。
我有 2 个合集:
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}}
但是浏览器中没有显示任何帖子。 我认为我的发布代码是错误的。谁能帮帮我?
将您的关注行更改为:
var follower = Followers.find({follower: user}).fetch().map(function(follower) {
return follower.following;
});
我所做的修改:
- 已将
followers: user
更改为follower:user
,因为我在您的关注者集合中没有看到关注者 属性。 - 在
find()
查询后添加fetch()
到 return 数组而不是游标。 - 使用
.map()
将您的对象数组转换为用户名字符串数组以提供给帖子。