MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Estrazione, modellazione e modifica del modello dati, con mongoid/mongodb

Fai due cose:

  • Filtra gli utenti con query db invece di filtrare nell'applicazione
  • recupera solo i campi di cui hai bisogno da db, piuttosto che l'intero oggetto utente (supponendo che tu abbia altre cose in user, che hai omesso qui per brevità)

    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:Probabilmente non vuoi usare map su User.all , richiederà molta memoria se hai molti documenti utente pesanti. Inoltre, non stai utilizzando gli utenti mappati, ma stai invece raccogliendo risultati nei competitors ordinate voi stessi, quindi each dovrebbe funzionare bene.