在我的用户数据中存储其他用户数据

时间:2016-05-20 03:50:48

标签: javascript meteor nosql

我很好奇这是不好的做法。在我的用户对象上,在配置文件属性下,我计划存储用户喜欢的内容。例如,对象就像这样:

user = {
  ...
  profile: {
    likes: [
      {
        user: {
          _id: USER_ID,
          avatar: USER_AVATAR,
          username: USER_USERNAME
        }
        otherData: true
      },
      ...
    ]
  }
}

我这样做的关注点是,如果用户关联更改了他们的头像,那么它与该用户关联的头像不会相同。也喜欢可能有无限量,所以我担心随着阵列的增长,我的表现会受到影响。

有没有更好的方法来解决这个问题?我知道在传统的数据库中,我会有一个单独的表格,并使用连接来吸引用户喜欢。

干杯!

2 个答案:

答案 0 :(得分:0)

您的疑虑是有效的。 NOSQL数据库可能会出现数据一致性问题,因为数据未正确规范化并存储在多个位置。

您可以通过将只是用户ID存储在likes数组中,然后执行应用程序级联接来加入配置文件,以及如下所示的用户数据来避免这些数据一致性问题:

likes: [
{_id: USER_ID1},
{_id: USER_ID2}
]

然而,当你这样做时,你基本上回到了关系模型(但没有SQL的所有好处)。

"正确"解决方案将取决于您的应用程序以及您是否关心进行连接所带来的性能损失,或者您是否关心获取过时数据的可能性。

答案 1 :(得分:0)

请不要那样做。如果您将喜欢存储在用户集合上,那么您的用户文档将继续增加。

您可以创建一个名为“喜欢”的新集合或任何您喜欢的集合。然后在新创建的集合中存储单个doc。

相关问题