Meteor:如何编写包含用户名的发布函数

Meteor: How to write a publish-function containing the username

注意:完整代码可以在这里找到:

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" : "a$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
        }
    ]
}

感谢您的帮助,感激不尽。

Courses 合集中的项目是您发布的内容。

因此,当您使用 Courses.find({"canEditCourse": { $in: [ this.userId ] } }); 查询时,canEditCourse 字段就是您要与 userId 匹配的内容(字面意思是查找 canEditCourse 所在的所有课程数组包含用户 ID。)

不过我不明白您为什么要在这里使用用户名。这对你有什么好处?

如果您确实想这样做,那么您需要让 canEditCourse 字段成为 username 而不是 userId 的数组。 这意味着您需要更改创建或编辑课程的逻辑以及填写此字段的逻辑。

不确定是否值得麻烦。如果您想要按用户名查找课程,则按用户名查找用户,获取 his/her 用户 ID 并按用户 ID 查找课程。

Meteor.publish('editableCourses', function (username) {
    var myUser = Meteor.users.findOne({'username': username});
    return Courses.find({"canEditCourse": { $in: [ myUser._id ] } });
});