流星:如何将“用户”集合中的“用户名”添加到我创建的新集合中?

时间:2019-03-06 17:49:00

标签: javascript mongodb meteor meteor-blaze

快速提问。如何将新字段添加到集合中?例如,我有一个名为Teams的集合,我想向其添加一个Members字段。目前,Teams仅接受文本(我创建并添加到集合中的团队)和createdAt日期。我的目标是能够通过“我的用户”集合找到一个用户,并将其添加为“团队”集合的成员。

我什至不知道从哪里开始。我正在使用帐号密码包,顺便说一句。现在这就是我所拥有的:

Template.teams.events({
   'submit .new-team'(event) {
      event.preventDefault()
      const target = event.target
      const text = target.text.value
      const members = target.members.value 
      newTeam.insert({
         text,
         createdAt: new Date(),
         members
      })
      (target.text.value = '')
   }
})

但是我在控制台上始终收到此错误:“ TypeError:无法读取Object.submit .new-team中未定义的属性'value'”

关于如何执行此操作的任何想法?非常感谢您的帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

我不熟悉流星雨,所以我不会在前端提供任何有用的代码,但总体思路是:

1)获取团队收藏(以相同的方式获取用户)

2)查找您对使用其ID感兴趣的团队,并添加新的对象属性成员(如果不存在)

3)使用新的memberId更新团队

我不确定您的数据库结构是什么,但可以说它看起来像这样:

{
  _id: teamId,
  name: teamName,
  createdAt: creationDate
}

快速预览:

updateTeam(teamId, userId) => {
  const teams = Teams.find().fetch();
  let chosenTeam = teams ? teams.find(team => team._id === teamId) : {};

  if (chosenTeam && chosenTeam._id) {
     let members = chosenTeam['members'] || [];
     members.push(userId);

     Teams.update({_id: teamId}, {$set: {members}});
  }
}

希望有帮助

编辑:当然,在获取Teams集合之前,您需要在服务器端提供发布并在客户端上订阅。 Docs are really helpful in understanding this mechanism