sql >> Databáze >  >> NoSQL >> MongoDB

Extrahování, modelování a změna datového modelu pomocí mongoidu/mongodb

Děláte dvě věci:

  • Filtrujte uživatele pomocí dotazu db namísto filtrování v aplikaci
  • načítat pouze pole, která potřebujete z db, spíše než celé uživatelské objekty (za předpokladu, že máte v user nějaké další věci, které jste zde pro stručnost vynechali)

    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:Pravděpodobně nechcete použít map na User.all , bude to vyžadovat hodně paměti, pokud máte hodně těžkých uživatelských dokumentů. Také nepoužíváte namapované uživatele, ale místo toho shromažďujete výsledky v competitors pole sami, takže each by mělo fungovat dobře.




  1. Jak aktualizuji/upsuji dokument v Mongoose?

  2. Generování teplotních map pomocí R, Php a Mongodb

  3. MongoDB třídí dokumenty podle prvků pole

  4. Jak zkontrolovat, zda vybraný e-mail a jméno již existují v MongoDB