使用ror加载MongoDB / Mongoid嵌入式文档

时间:2012-11-03 22:52:48

标签: ruby-on-rails mongodb mongoid

我有一个包含许多嵌入文档(DataPoint)的文档(DataSet)(1:N关系)。因为这在rails中显示为一个数组,如果我想读取每个20个元素,它会将每个元素加载到内存中,还是只加载每个20个元素?

我想知道这是否效率低下。理想情况下,我只想从数据库加载我需要的东西。

以下是一个例子:

a = DataSet.first
points = a.data_points.values_at(*(0..a.data_points.count).step(20))

这不好吗?是否有特定方式来实现这一目标?

1 个答案:

答案 0 :(得分:1)

嵌入式文档不是关系(以典型的RDBMS方式),而是实际嵌入(因此名称)在父记录中,就像任何其他属性一样。因此,当您调用DataSet.first时,您将整个文档及其嵌入的记录加载到内存中。

根据应用程序的结构,您可能会看到将每20个DataPoint非规范化为单独的嵌入式关系(在回调期间,或在后台任务中,或类似的东西),然后在加载文档时,只加载DataSet.only(:datapoints_sample).first的那些点 - 这只会将该关系加载到内存中(而不加载其他属性)。