Meteor:发布this.userId时如何订阅/显示用户名

时间:2015-12-30 22:58:05

标签: mongodb meteor publish-subscribe subscription

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

https://github.com/Julian-Th/crowducate-platform/

我有以下发布功能:

Meteor.publish('editableCourses', function () {
    return Courses.find({"canEditCourse": { $in: [ this.userId ] } });
});

Meteor.publish("userData", function () {
    if (this.userId) {
        return Meteor.users.find({_id: this.userId},
            {fields: {'realname': 1, 'username': 1, 'gender': 1, 'language': 1, 'biography': 1 }})
    }
});

Meteor.publish("allUsernamesExceptCurrent", function () {
  // Get current user
  var currentUserId = this.userId;

  // Get all users except current,
  // only get username field
  var users = Meteor.users.find(
    {_id: {$ne: currentUserId}},
    {fields: {username: 1}}
  );

  return users;
});

这是模板:

<template name="myTeachingCourses">
  <button class="btn btn-primary js-create-course"><i class="fa fa-plus"></i> Create a Course</button>
  <hr>
  <div class="row">
      <ul class="thumbnails list-unstyled">
          {{#each courses}}
          {{>courseCard}}
          {{/each}}
      </ul>
  </div>
</template>

订阅的助手:

Template.myTeachingCourses.helpers({
    'courses': function(){
      return Courses.find();
    }
});    

Template.myTeachingCourses.created = function () {
      // Get reference to template instance
      var instance = this;

      // Subscribe to all published courses
      instance.subscribe("editableCourses");
    };

问题:模板不呈现创建的课程。课程创建者无法查看自己的课程或添加其他合作者。我想知道原因是否可能,因为canEditCourse现在是一个带有用户名而不是ID的数组。

My JSON for Courses:
{
    "_id" : "hRX8YABpubfZ4mps8",
    "title" : "Course Title here",
    "coverImageId" : "Qojwbi2hcP2KqsHEA",
    "author" : "Name",
    "keywords" : [ 
        "test", 
        "meteor"
    ],
    "published" : "true",
    "about" : "Testing",
    "canEditCourse" : [ 
        "User1"
    ],
    "createdById" : "zBn6vtufK2DgrHkxG",
    "dateCreated" : ISODate("2015-12-29T21:42:46.936Z")
}

通过this问题,我发现在数组中存储用户名不是一个好主意,因为现在显而易见的原因。在开始时,我实际上存储了ID而不是用户名,但随后更改了它,因为使用自动填充的用户名和typeahead,并且渲染所有协作者的ID并不是一件好事。修复它的最佳方法是什么?换句话说,如何渲染所有创建的课程。

1 个答案:

答案 0 :(得分:1)

因此,当您自己回答时,您的课程集合字段canEditCourse的数组为usernames,而不是userId,因此查询不会返回任何内容。