/ / mongoid: retorna todos os documentos incorporados - ruby, mongodb, mongoid

mongoid: retorna todos os documentos incorporados - ruby, mongodb, mongoid

qual é a maneira mais eficiente de retornar todos os documentos incorporados?

Digamos que um usuário tenha muitos endereços incorporados ... no ActiveRecord eu poderia obter uma contagem deles com Address.count. qual é a versão do documento / mongo incorporado para fazer isso?

que tal quando seus 2 ou mais níveis de profundidade?Produto> Prensagem> Variações ... como posso obter uma contagem de todos os capítulos de todos os livros, de todos os autores? como isso se compararia a fazer tudo, digamos, 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

Respostas:

4 para resposta № 1

Como @maga diz, Map / Reduce é muito lento para agregação em tempo real e armazenar um campo de contagens é a melhor maneira.

Outra opção é retornar todo o documento (ou campos específicos) ao seu aplicativo e fazer com que seja analisado lá. Isso pode ser melhor quando você não sabe quantos níveis aninhados existirão.

Apesar do que algumas pessoas podem pensar, existeabsolutamente nenhum mal em fazer isso. Seu servidor de banco de dados terá o prazer de devolver este documento muito rapidamente e permitir que seu aplicativo controle o pós-processamento.

Em termos de escalabilidade, essa abordagem significa que você escalará seus servidores de aplicativos (que geralmente são muito mais acessíveis) em vez de seus servidores de banco de dados (que normalmente são mais caros).


5 para resposta № 2

Normalmente é feito por agregação funções (incluindo mapear / reduzir para situações mais específicas), mas são relativamente lentos e não apropriados para uso em tempo real em aplicações pesadas. Portanto, se o desempenho for problema, sugiro campos de números adicionais, atualizados por operações atômicas quando ocorrem mudanças e são corrigidas por funções de agregação de tempos em tempos.


2 para resposta № 3

Mapear / reduzir no MongoDB é útil para processamento em lote de dados e operações de agregação.