注意:整个代码可以在这里找到:
https://github.com/Julian-Th/crowducate-platform/
目前,数组中的所有项目都显示在一个列表中,而不是单独的列表标记:
我有一个pub功能,完美运行:
Meteor.publish('editableCourses', function () {
return Courses.find({"canEditCourse": { $in: [ this.userId ] } });
});
但是,我想改用用户名。所以我尝试了以下但没有结果:
Meteor.publish('editableCourses', function () {
return Courses.find({"canEditCourse": { $in: [ this.user.username ] } });
});
我的JSON:
{
"_id" : "P5JFAfrxaNpApvZWW",
"createdAt" : ISODate("2015-12-30T17:38:47.506Z"),
"services" : {
"password" : {
"bcrypt" : "$2a$10$lLskLjO6W2eoA06Ws5sC/upq6Stbh1eTbgTAN3wa39RCD8x7GU1ZS"
},
"resume" : {
"loginTokens" : [
{
"when" : ISODate("2015-12-30T17:38:47.605Z"),
"hashedToken" : "g2rye+mwrNNsjL3mHtxT+sYXgj3OGoEZsGRMyVEI47I="
}
]
}
},
"username" : "User1",
"emails" : [
{
"address" : "user1@test.com",
"verified" : false
}
]
}
感谢您的帮助,谢谢。
答案 0 :(得分:2)
Courses
集合的项目是您要发布的内容。
因此,当您使用Courses.find({"canEditCourse": { $in: [ this.userId ] } });
进行查询时,canEditCourse
字段就是您要与userId
匹配的内容(字面意思是查找canEditCourse
数组包含的所有课程userId。)
我不知道你为什么要在这里使用用户名。这对你有什么影响?
如果您确实要执行此操作,则需要将canEditCourse
字段设为username
而不是userId
的数组。
这意味着您需要更改创建或编辑课程的逻辑以及填写此字段的位置。
不确定这是值得的。如果您想要的是按用户名查找课程,则按用户名查找用户,获取他/她的userId并按userId查找课程。
Meteor.publish('editableCourses', function (username) {
var myUser = Meteor.users.findOne({'username': username});
return Courses.find({"canEditCourse": { $in: [ myUser._id ] } });
});