【问题标题】:Meteor: How to add Username from Users collection to a new collection I created?Meteor:如何将用户集合中的用户名添加到我创建的新集合中?
【发布时间】:2019-03-07 03:28:13
【问题描述】:

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

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

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”

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

【问题讨论】:

  • 错误“TypeError: Cannot read property ‘value’ of undefined at Object.submit .new-team” 表示没有target.texttarget.members 您要读取其中的value 属性。想想让机器返回null的属性value。由于这些值之一是undefinednull,解释器会抛出错误,因为这些值没有任何属性。

标签: javascript mongodb meteor meteor-blaze


【解决方案1】:

我不熟悉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 集合之前,您需要在服务器端提供发布并在客户端订阅它。 Docs are really helpful in understanding this mechanism

【讨论】:

    猜你喜欢
    • 2019-09-21
    • 2020-09-28
    • 2022-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多