我有一个系列"会员"在MongoDB中使用这个初始数据:
Members.insert({
event: 1,
username: "Juan Machado",
answers: ["Tennis", "Golf", “Bowling”]
});
Members.insert({
event: 1,
username: "Elvis Crespo",
answers: [“FootBall”, “Tennis”, “Squash”]
});
Members.insert({
event: 1,
username: "Roman Santos",
answers: [“Golf”, “Bowling”]
});
如果已登录的用户是第一个插入的用户(“Juan Machado”),我想向他显示在同一项运动中匹配的其他成员的用户名,在我的渲染模板中显示如下内容:
“Juan Machado”这是你的比赛:
如何使用{{#Each Members}}
在Meteor中进行操作?我很难执行collection.find({})
查询,也无法在我的模板中进行渲染。
答案 0 :(得分:1)
首先,通过id而非用户名将用户保存在mebers集合中,因为用户名更改而id不会。接下来的体育运动,我建议一系列运动。然后通过使用此查询,您可以检查元素是否在数组中:
{"answers": {$in: [element]}}
。首先使用this._id
在帮助程序中查找当前用户。然后通过他的is(或你现在的用户名)从基地拉一个doc。然后获取他的答案数组并使用foreach
循环来完成它们。剩下的就是让你决定如何去做。
备注当您在HTML中执行每个操作时,您可以为成员集合执行此操作,并在此范围内调用帮助程序。
答案 1 :(得分:1)
首先让我们来寻找匹配的成员。您将要使用以下命令从服务器发布此内容:
Meteor.publish('matchingMembers',function(){
let username = Meteor.users.find({ _id: this.userId }).username;
if ( username ){
let myAnswers = Members.find({ username: username }).answers;
if ( myAnswers ){
return Members.find({ answers: { $in: myAnswers }});
}
}
});
在您的模板中,假设您已订阅该出版物并已准备就绪,您需要:
{{#each otherMembers}}
{{username}} matches with you in:
{{#each matchingAnswers}}
{{this}}
{{/each}}
{{/each}}
您需要以下帮助者:
Template.myTemplate.helpers({
otherMembers: function(){
let myUsername = Meteor.user().username;
return Members.find({ username: { $ne: myUsername }});
},
matchingAnswers: function(){
let myAnswers = Members.findOne({ username: Meteor.user().username }).answers;
// return the intersection of the other member's answers with the current user
return _.intersection(this.answers,myAnswers); /
}
});