首页 > 解决方案 > Meteor:如何将用户集合中的用户名添加到我创建的新集合中?

问题描述

快速提问。如何向集合中添加新字段?例如,我有一个名为 Teams 的集合,我想向其中添加成员字段。现在 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: Cannot read property 'value' of undefined at Object.submit .new-team”</p>

关于如何去做这件事的任何想法?非常感谢您的帮助。谢谢!

标签: javascriptmongodbmeteormeteor-blaze

解决方案


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

1) 获取 Teams 集合(获取用户的方式相同)

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 集合之前,您需要在服务器端提供发布并在客户端订阅它。文档对于理解这种机制非常有帮助


推荐阅读