在Mongoid中引用嵌入式文档内部

时间:2013-01-22 17:01:53

标签: ruby-on-rails mongodb mongoid

我希望得到一些关于做一些MongoDB数据设计的反馈。我之前从未真正使用它,所以如果我的设计看起来很疯狂,请告诉我。

我有一个用户概念和用户执行的活动。需要为用户及其执行的活动提供地址,并且他们执行的活动是该用户独有的。由于活动永远不会重叠,地址也不应该重叠。

我的初始数据结构如下所示:

User : {
  # User data,
  address : {
    # address data
  },
  address : {
    # address data,
    home : true
  },
  activity : {
    # activity data,
    _address_id: #referenced address within user
  },
  activity : {
    # activity data,
    _address_id: #referenced address within user
  },
}

假设活动可以在家中进行。

有更好的方法吗?我应该只在活动和用户中嵌入地址吗?我应该从用户模型中完全删除它吗?

这一切都在使用Mongoid的Rails应用程序中聚集在一起。

1 个答案:

答案 0 :(得分:1)

您的数据结构非常好 - 面向文档的数据库应该像这样使用。你不应该重复每个活动中的地址,因为你最终会浪费空间。

User : {
  # User data,
  address_<id> : {
    # address data
  },
  address_<id> : {
    # address data,
    home : true
  },

  activity : {
    # activity data,
    _address_id: #referenced address within user
  },
  activity : {
    # activity data,
    _address_id: #referenced address within user
  },
}

您需要照顾两件事:
 1.不要为单个活动检索整个文件  2.确保文档不超过最大大小(或重新编译)