MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Extraindo, modelando e alterando o modelo de dados, com mongoid/mongodb


Você faz duas coisas:
  • Filtrar os usuários com consulta db em vez de filtrar no aplicativo

  • apenas busque os campos que você precisa do db, em vez de todos os objetos do usuário (supondo que você tenha outras coisas no usuário, que você omitiu aqui por brevidade)
    Competitor = Struct.new(:html_url, :description, :user)
    competitors = []
    User.where('watchlists.tags_array' => %w[ruby web framework]).
        only(:nickname, :watchlists).each do |u|
      u.watchlists.where(:tags_array => %w[ruby web framework]).each do |wl|
        competitors << Competitor.new(wl.html_url, wl.description, u.nickname)
      end
    end
    

PS:Provavelmente você não quer usar map em User.all , exigirá muita memória se você tiver muitos documentos de usuário pesados. Além disso, você não está usando os usuários mapeados, mas coletando resultados nos competitors array você mesmo, então each deve funcionar muito bem.