MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Extrahieren, Modellieren und Ändern des Datenmodells mit mongoid/mongodb

Sie tun zwei Dinge:

  • Filtern Sie die Benutzer mit der DB-Abfrage, anstatt in der Anwendung zu filtern
  • Holen Sie nur die Felder, die Sie benötigen, aus der Datenbank, und nicht die gesamten Benutzerobjekte (vorausgesetzt, Sie haben noch andere Dinge in user, die Sie hier der Kürze halber weggelassen haben)

    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:Wahrscheinlich möchten Sie map nicht verwenden auf User.all , wird viel Speicher benötigt, wenn Sie viele umfangreiche Benutzerdokumente haben. Außerdem verwenden Sie nicht die zugeordneten Benutzer, sondern sammeln stattdessen Ergebnisse bei den competitors selbst anordnen, also each sollte gut funktionieren.