Объединение результатов нескольких критериев Монгоида в один критерий - PullRequest
0 голосов
/ 10 мая 2019

У меня есть список событий, во время которых люди общаются.Моя цель - собрать все разговоры, которые произошли во время таких событий.

Я попытался запросить каждое событие и добавить их в массив, который я затем попытался сгладить и удалить дубликаты следующим образом:

# this works fine
def event_conv_selector(event) 
  user_ids = event.participations.pluck(:user_id)
  users = ::User.in(id:user_ids)
  Conversation.where(:created_at => event.range_for_conversations).in(initiator_profile_id: students.pluck(:id))
end

conversations = []
# RAM can't hold that many conversations, it fails...
Event.each do |event|
  conversations << event_conv_selector(event).to_a
end

conversations.flatten.uniq(&:_id)

У меня такой вопрос: есть ли способ запросить и объединить результаты для всех критериев по другим критериям, с которыми я могу справиться, не разрывая свою оперативную память?

Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 10 мая 2019

Если проблема связана только с объектами разговора, вы можете попробовать:

# same as before
def event_conv_selector(event) 
  user_ids = event.participations.pluck(:user_id)
  users = ::User.in(id:user_ids)
  Conversation.where(:created_at => event.range_for_conversations).in(initiator_profile_id: students.pluck(:id))
end

conversation_ids = Set.new
Event.each do |event|
  conversation_ids += event_conv_selector(event).pluck(:id)
end
0 голосов
/ 10 мая 2019

если вам просто нужны уникальные идентификаторы, тогда просто держите идентификаторы вместо целых объектов.

require 'set'

def event_conv_selector(event)
  Conversation...pluck(:id) # return id array
end

conversations = Set.new
Event.each do |event|
  conversations.merge(event_conv_selector(event))
end
conversations.to_a

или вы можете переопределить eql? класса Conversation и сохранить только уникальные объекты в наборе наборов.

Ваш запрос и отношения мне не понятны. однако установите этот гем , чтобы улучшить загрузку Mongoid даже для вложенных / полиморфных ассоциаций.

...