【问题标题】:Meteor: How to write a publish-function containing the usernameMeteor:如何编写包含用户名的发布函数
【发布时间】:2015-12-30 17:51:02
【问题描述】:

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

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
        }
    ]
}

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

【问题讨论】:

    标签: mongodb meteor publish publish-subscribe


    【解决方案1】:

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

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

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

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

    不确定这是否值得。如果您想要通过用户名查找课程,然后通过用户名查找用户,获取他/她的用户 ID 并通过用户 ID 查找课程。

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

    【讨论】:

    • 特别是如果用户名可以更改。用户_ids 是不可变的。
    • @MichelFloyd 确切地说:我要指出username 必须是唯一的,但它们也应该是不可变的,否则您将来会遇到不连贯的数据查找
    • 我将您的答案标记为已解决,@MichelFloyd 让我意识到糟糕的设计。我要问一个新问题,这个问题将从不同的角度阐明这个问题。只是解释起来有点复杂:stackoverflow.com/questions/34538544/…
    猜你喜欢
    • 1970-01-01
    • 2016-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-28
    • 1970-01-01
    • 1970-01-01
    • 2014-04-16
    相关资源
    最近更新 更多