【问题标题】:How to store a user record on another collection in Meteor如何将用户记录存储在 Meteor 的另一个集合中
【发布时间】:2015-10-23 07:30:14
【问题描述】:

我正在尝试查找如何将用户与 Meteor 中的另一个集合文档相关联,但不确定如何执行此操作。

我的目标是找到最有效且面向未来的方法来存储这些信息,尽管我现在知道这可能被视为有些主观。

在我的示例中,我使用“消息”集合并将用户 ID 作为“发件人”和“收件人”存储在此文档中,收件人是一组用户 ID。

当我想显示有关此消息的发件人/收件人的信息时,我应该使用帮助程序来输出某些数据吗?或者在创建文档时将senderNamesenderAvatar 之类的内容添加到文档本身?还是我错过了另一种将用户与另一个可能更有效的对象相关联的方法?

这是一个 JSON 示例:

选项 1 - 简单地将用户 ID 存储在另一个对象上(消息)

{
   "_id": "boDNs36xzLw7eLLhx",
   "sender": "8jpS96b4T65g5ARug",
   "recipient": "4Pa5i5vQ2gDtYQBDP",
   "message": "A new message.",
   "createdAt": "2015-10-22T21:18:18.291Z"
}

选项 2 - 存储有关文档本身的更多信息

{
  "_id": "boDNs36xzLw7eLLhx",
  "sender": "8jpS96b4T65g5ARug",
  "senderName": "Joe Bloggs",
  "senderAvatar": "http://myimg.com",
  "recipient": "4Pa5i5vQ2gDtYQBDP",
  "recipientName": "Bill Bloggs",
  "recipientAvatar": "http://myotherimg.com",
  "message": "A new message.",
  "createdAt": "2015-10-22T21:18:18.291Z"
}

【问题讨论】:

  • 您在询问是否应该对数据进行非规范化。给定一个两句话长的用例,不可能客观地回答。这个问题非常基于意见和广泛,不幸的是不适合这个网站。
  • 如果你想让你的问题与主题相关,你必须提供一个示例结构(不需要实际代码,JSON 就可以)并提供一组明确的具体目标(例如“检索所有必要的数据,以显示谁在一个请求中发送了文件”)。
  • 嗨安德烈,“最有效”是什么意思?您能否将其(和“最佳方式”)改写为具有客观答案的指标?尽量避免提出相对的问题(例如“什么更有效”)或固执己见(例如“什么是最好的方法”),因为这些短语可能会让原本很好的问题搁置。
  • 谢谢你们,如果可能的话,我会尝试编辑问题,以便更客观。
  • 您陈述的目标非常广泛和主观。 “面向未来”几乎没有任何意义,它在 Web 开发中的意义更小。如果没有明确的背景、基准和配置文件,很难评估“最有效”。

标签: mongodb meteor foreign-keys


【解决方案1】:

在我看来,您应该坚持第一个选项,然后通过用户 ID 从用户集合中获取用户数据。

两个主要论点:

  1. 第二个选项复制数据。如果用户交换 100 条消息,那么数据库中有 101 个“Joe Bloggs”、“Bill Bloggs”等相同的字符串。

  2. 如果其中一个用户更改了名称,它要么不会更改消息,要么您必须更新此用户发送和接收的每条消息,这意味着大量且不必要的数据库负载。

【讨论】:

  • 非常感谢 KG32 我必须说,从我所阅读的所有内容来看,使用这种方法确实让我感觉更自在了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-25
  • 2016-03-20
  • 1970-01-01
  • 1970-01-01
  • 2014-09-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多