如何将用户记录存储在Meteor中的另一个集合

时间:2015-10-22 20:46:20

标签: mongodb meteor foreign-keys

我试图找到如何将用户与Meteor中的另一个收藏文档相关联,并且不确定如何执行此操作。

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

在我的例子中,我正在使用"消息"收集和存储用户ID作为"发件人"和#34;收件人",收件人是一组用户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"
}

1 个答案:

答案 0 :(得分:0)

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

两个主要论点:

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

  2. 如果其中一个用户更改了名称,则它或者不会更改消息,或者您必须更新此用户发送和接收的每条消息,这意味着需要进行大量且不必要的数据库加载。 / p>