返回所有嵌入文档的最有效方法是什么?
说一个用户嵌入了很多地址...在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
答案 0 :(得分:5)
通常由aggregation函数完成(对于更具体的情况,包括map/reduce),但它们相对较慢,不适合在繁重的应用程序中实时使用。因此,如果性能出现问题,我建议使用其他数字字段,在发生更改时由atomic operations更新,并通过聚合函数不时进行修改。
答案 1 :(得分:4)
正如@maga所说,Map / Reduce对于实时聚合来说太慢了,存储计数字段是最好的方法。
另一种选择是将整个文档(或特定字段)返回给您的应用程序并在那里进行解析。当您不知道将存在多少嵌套级别时,这可能是最好的。
尽管有些人可能会想到,但这样做绝对没有害处。您的数据库服务器很乐意快速返回此文档,并允许您的应用程序处理后期处理。
就可扩展性而言,这种方法意味着您将扩展应用程序服务器(通常更便宜),而不是数据库服务器(通常更昂贵)。
答案 2 :(得分:2)
Map/reduce对批量处理数据和聚合操作很有用。