mongoid:返回所有嵌入的文档

时间:2011-03-27 02:51:08

标签: ruby mongodb mongoid

返回所有嵌入文档的最有效方法是什么?

说一个用户嵌入了很多地址...在ActiveRecord中我可以用Address.count来计算它们。这样做的嵌入式文档/ mongo版本是什么?

当它的2个或更多级别深入时怎么样?产品>按>变化......我怎样才能得到所有作者所有书籍中所有章节的统计数据?如何比较这样做,比如说,Ruby?

Product has_many Pressings
Pressing has_many Variations

Product
  def self.pressings
    all.collect { |p| p.pressings }.flatten
  end
  def self.variations
    self.pressings.collect { |p| p.variations }.flatten
  end
end

3 个答案:

答案 0 :(得分:5)

通常由aggregation函数完成(对于更具体的情况,包括map/reduce),但它们相对较慢,不适合在繁重的应用程序中实时使用。因此,如果性能出现问题,我建议使用其他数字字段,在发生更改时由atomic operations更新,并通过聚合函数不时进行修改。

答案 1 :(得分:4)

正如@maga所说,Map / Reduce对于实时聚合来说太慢了,存储计数字段是最好的方法。

另一种选择是将整个文档(或特定字段)返回给您的应用程序并在那里进行解析。当您不知道将存在多少嵌套级别时,这可能是最好的。

尽管有些人可能会想到,但这样做绝对没有害处。您的数据库服务器很乐意快速返回此文档,并允许您的应用程序处理后期处理。

就可扩展性而言,这种方法意味着您将扩展应用程序服务器(通常更便宜),而不是数据库服务器(通常更昂贵)。

答案 2 :(得分:2)

MongoDB中的

Map/reduce对批量处理数据和聚合操作很有用。