MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Extraction, modélisation et modification du modèle de données, avec mongoid/mongodb

Vous faites deux choses :

  • Filtrer les utilisateurs avec la requête db au lieu de filtrer dans l'application
  • ne récupère que les champs dont vous avez besoin à partir de la base de données, plutôt que l'ensemble des objets utilisateur (en supposant que vous ayez d'autres éléments dans l'utilisateur, que vous avez omis ici par souci de brièveté)

    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 :Vous ne voulez probablement pas utiliser map sur User.all , cela nécessitera beaucoup de mémoire si vous avez beaucoup de documents utilisateur lourds. De plus, vous n'utilisez pas les utilisateurs mappés, mais collectez plutôt les résultats dans les competitors tableau vous-même, donc each devrait fonctionner correctement.