【问题标题】:Meteor and multiple subscriptions to the same collection (and the same object)Meteor 和多个订阅同一个集合(和同一个对象)
【发布时间】:2015-11-16 02:58:12
【问题描述】:

我正在使用 meteor.js 编写一个大型模块化应用程序。在我的应用程序中,我有一个名为“课程”的集合。课程集合内对象的 Schema 如下所示:

_id: MongoId
title: String
intro: String
content: Object
settings: Object
    secret: Object
    nonSecrets: Object
members: [Object]
    userId: MongoId
    wantsMail: Boolean
    gotMemberAt: Date

我有几个出版物:

# Publish an overview of all courses, I am Member at
Meteor.publish 'myCourses', ->
     return Courses.find(
           {members:{$elemMatch:{userId: @userId}}},
           {fields:{title:1, intro:1, 'settings.nonsecret':1, 'members.$':1}}
     )

# Single Course Detail
Meteor.publish 'singleCourse', (id) ->
    return Courses.find(
        id, 
        {fields: {title:1, intro:1, content:1, 'settings.nonSecret':1}}
    )

# Admin Information of course
Meteor.publish 'singleCourseAdamin', (id) ->
    return Courses.find(
        id, 
        {fields: {title:1, settings:1, members:1}}
    )

我现在的问题是,当我订阅所有三个出版物时,除了myCourses 出版物的成员之外,我没有其他成员。

是否有任何关于在实际流星版本中发布和订阅同一文档的子集如何工作以及如果我想让它工作需要检查什么的好文本?

或者是否有一个包可以更容易地限制每个用户对字段的访问?

【问题讨论】:

    标签: meteor coffeescript meteor-publications


    【解决方案1】:

    这是known issue。我最近在common mistakes 中添加了一个关于它的部分(参见“合并框”)。虽然有一些complicated workarounds,但最好的选择是:

    1. 重新组织您的数据,以便不需要发布子字段。
    2. 一次只使用一个需要特定子字段的发布者(在这种情况下,也许您可​​以在管理员发布者处于活动状态时关闭myCourses 发布者)。这可能很难保证。
    3. 只需发布更多数据(整个字段)。显然,这在某些情况下可能行不通 - 特别是在存在安全问题的情况下。

    另请注意,当第一个发布者和最后一个发布者都处于活动状态时,settings 字段应该有同样的问题。

    【讨论】:

    • 我发现问题出在“members.$”运算符上,它使 pub/sub-system 认为数组中只有这一个元素。当我从“myCourses”出版物中删除这部分时,会出现成员数组的所有内容。看来我需要另一种方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-18
    • 1970-01-01
    • 1970-01-01
    • 2018-03-07
    • 2014-09-17
    • 2018-11-28
    • 1970-01-01
    相关资源
    最近更新 更多