我有一个带有这样的架构的topic_followers表
id, user_id, topic_id, creation_date, modified_date
我想从此表中生成一个散列,其中user_id为键,该用户正在跟踪的topic_ids数组为值。目前,我正在尝试使用以下代码来实现这一目标:
topic_followers = TopicFollower.select("user_id, topic_id")
topic_follower_hash = {}
topic_followers.each do |topic_follower|
topic_follower_hash[topic_follower.user_id] = topic_follower_hash[topic_follower.user_id] || []
topic_follower_hash[topic_follower.user_id] << topic_follower.topic_id
end
问题是,这是一张大桌子,我担心它会炸毁我的记忆。我在Google上搜索了一些,并建议使用find_in_batches撰写一些文章。我认为这不符合我的需要,因为用户关注的某些主题可能不在当前批次中。想知道这里推荐的做法来解决此类问题吗?
答案 0 :(得分:0)
您正在寻找的实际上是聚合。
group_by user_id
inset all topic_id inside an array
您的最终答复如下所示:
[{"id": "user_id", "topic_ids": ["topic_id1", ...]}...]
然后使用单个循环将此哈希数组转换为单个哈希。
要在Postgre中引用聚合,请使用以下命令: Aggregation in Postgre