MongoDB рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХрд╛ рдирдореВрдирд╛ рд▓реЗрдирд╛

рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдореИрдВ рдПрдХ рдирд╣реАрдВ рдмрд▓реНрдХрд┐ рддреБрдЪреНрдЫ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдЖрдпрд╛ рдерд╛, рдЬрд╣рд╛рдВ рдореБрдЭреЗ рд╕рд╛рдЗрдЯ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦреЗ рдЧрдП рдбреЗрдЯрд╛рдмреЗрд╕ рдкрджреЛрдВ рд╕реЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░реВрдк рд╕реЗ рдЪрдпрди рдХрд░рдирд╛ рдерд╛ред рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд░реВрдк рдореЗрдВ MongoDB рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░реЗрд▓ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЛрдВрдЧреЙрдпрдб рдЬрд╛рдо рд╣реИред рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдп рдХреЛ рдкреВрд░рд╛ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ, рдХреЛрдИ рдмрд┐рд▓реНрдХреБрд▓ рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ Sort_by_random рдпрд╛ рдРрд╕рд╛ рдХреБрдЫред рдПрдХ рдмрд┐рд▓реНрд▓реА рдХреЗ рддрд╣рдд рдЙрджрд╛рд╣рд░рдг рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЛ рдпрд╣ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕рд░рд▓ рддрд░реАрдХрд╛ рджреЗрдЦреЗрдВред рдореЛрдВрдЧреЙрдпрдб рдореЗрдВ рдПрдХ рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдХрдИ рд░рд┐рдХреЙрд░реНрдб рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ рдпрд╛, рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рд╕рдВрджрд░реНрдн рдмрд┐рдВрджреБ рдХреЗ рд▓рд┐рдП рдХрд░реНрд╕рд░ рд╕реЗрдЯ рдХрд░реЗрдВред рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рд╕реНрдХрд┐рдк рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЖрдк рдЗрд╕реЗ рдХрдИ рд░рд┐рдХреЙрд░реНрдб рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╕реНрдХрд┐рдк рдХрд░рдиреЗ рд▓рд╛рдпрдХ рд╣реИрдВред рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рддреАрди рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИ, рддреЛ рджреВрд╕рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЗрд╕ рддрд░рд╣ рдХреБрдЫ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред Post.skip (1) .first рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЬрд╛рдирдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреА рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡рд╣рд╛рдВ рд╕реЗ рдкрдврд╝рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
proxy = Post.where(...) skip = rand(proxy.count - COUNT_OF_POSTS_TO_SHOW) @posts = proxy.skip(skip).limit(COUNT_OF_POSTS_TO_SHOW) 


рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╡рд┐рд╢реЗрд╖ рд╢рд░реНрддреЗрдВ рдирд╣реАрдВ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рддрд╣рдд рдЖрдк рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреЛрдб рд╕рд░рд▓ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред рдЖрдорддреМрд░ рдкрд░, рдХреБрдЫ рд╢рд░реНрддреЗрдВ рдЕрднреА рднреА рдореМрдЬреВрдж рд░рд╣реЗрдВрдЧреА, рдЬреИрд╕реЗ рдХрд┐ рдирд┐рд░реНрдорд╛рдг рдХреА рддрд╛рд░реАрдЦ рдпрд╛ рд╕реНрдерд┐рддрд┐ред рдпрд╣ рдирдореВрдирд╛ рдмрд╣реБрдд рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╛рдлреА рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рд╕рдВрджрд░реНрдн рдмрд┐рдВрджреБ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рд╕рднреА рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВред рд╢рд╛рдпрдж рдпрд╛рджреГрдЪреНрдЫрд┐рдХрддрд╛ рдХрд╛ рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдХрд┐рд╕реА рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдЧрд╛, рдЦрд╛рд╕рдХрд░ рдпрджрд┐ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдПрдХ рд░рд┐рдХреЙрд░реНрдб рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд┐рдзрд┐ рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рдЕрд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬрд╣рд╛рдВ рд╣рдо рдЙрддреНрдкрд╛рджреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдПрдХ рд╣реА рд╢реНрд░реЗрдгреА рд╕реЗ рдпрд╛ рд╕рдорд╛рди рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдЙрддреНрдкрд╛рдж рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ (рд╕рдВрдЧреНрд░рд╣ рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░)
рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░рд┐рдХреЙрд░реНрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдореЗрд░рд╛ рдирд┐рд░реНрдгрдп рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдиреЗ рдЕрдзрд┐рдХ рд╕рд╣реА рдкрд░рд┐рдгрд╛рдо рджрд┐рдПред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдЙрд╕ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдПрдХ рдирдпрд╛ рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдЪрдпрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдореИрдВрдиреЗ рдЗрд╕реЗ rand_order рдирд╛рдо рджрд┐рдпрд╛ рдерд╛ред рд╣рдордиреЗ рдЗрд╕рдореЗрдВ 0 рд╕реЗ 1 рддрдХ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рдирдВрдмрд░ рд▓рд┐рдЦрд╛ рд╣реИред рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдХреЛ рднрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рд╕рдЯреАрдХ рддрд░реАрдХрд╛ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рдлрд╝рд┐рд▓реНрдЯрд░ рдлрд╝рд┐рд▓реНрдЯрд░ рдЬреЛрдбрд╝рдирд╛ рд╣реИ, рдЬреЛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:
  def set_rand_order self.rand_order = (rand 0.0..1).round(15) unless rand_order end 


рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рд░ рдмрд╛рд░ рдЬрдм рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЬрд╛рдВрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ rand_order рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд┐рдП рдорд╛рди рднрд░рд╛ рд╣реБрдЖ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЦрд╛рд▓реА рд╣реИ рдпрд╛ рдирд╣реАрдВред рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЕрдм рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛:
 proxy = Post.where(...) skip = rand(proxy.count - COUNT_OF_POSTS_TO_SHOW) @posts = proxy.asc(:rand_order).skip(skip).limit(COUNT_OF_POSTS_TO_SHOW) 


рдпрд╣ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдореМрдЬреВрджрд╛ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЙрдирдХреЗ рд▓рд┐рдП рд░реИрдВрдб_рдСрд░реНрдбрд░ рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд┐рдП рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рддрдереНрдп рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдХрд┐ рд╣рдордиреЗ рдЗрд╕реЗ рдкрд╣рд▓реЗ_рдлрд┐рд▓реНрдЯрд░ рдореЗрдВ рдХрд┐рдпрд╛ рдерд╛, рдЖрдкрдХреЛ рдмрд╕ рдкреНрд░рддреНрдпреЗрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╕реЗрд╡ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
 Post.all.each{|p| p.save} 

Source: https://habr.com/ru/post/In210706/


All Articles