sql >> Base de Datos >  >> NoSQL >> MongoDB

Extracción, modelado y cambio de modelo de datos, con mongoid/mongodb

Haces dos cosas:

  • Filtrar a los usuarios con consulta de base de datos en lugar de filtrar en la aplicación
  • solo obtenga los campos que necesita de db, en lugar de todos los objetos del usuario (suponiendo que tenga otras cosas en el usuario, que omitió aquí por brevedad)

    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
    

PD:Probablemente no quieras usar map en User.all , requerirá mucha memoria si tiene muchos documentos de usuario pesados. Además, no está utilizando los usuarios mapeados, sino recopilando resultados en los competitors matriz usted mismo, por lo que each debería funcionar bien.