【发布时间】:2018-01-09 18:08:47
【问题描述】:
请原谅我对 Ruby/Rails 的无知,我还在学习。
详情:
我有两个 mongodb 表。 people 有 214 条记录,people_org 有 107 条,以后只会增加。这些表之间唯一的唯一联系是人名,平均约 15 个字符。我目前无法控制此数据库结构。
目前我正在遍历每个people 对象,然后使用find_by 查找匹配记录,打印我需要的ID,并打印一些信息。
<%@people.each do |p|%>
...
<%=@people_org.find_by(name: p.name).id%>
...[priting a few paragraphs of text]...
<%end%>
...
<%end%>
问题:
性能很慢(约 10 秒)。
可能的解决方案:
(1)我们的团队可能会适应不依赖字符串匹配的结构,而是使用整数(我认为这会提高性能)。
(2) 或许有更有效的方法?
(3) 也许有一种方法可以准备或更改数据以进行更有效的排序?
提前感谢您的帮助。
【问题讨论】:
-
people和people_org之间有关联吗? -
可以使用MongoDB提供的lookup聚合:stackoverflow.com/a/35948843/2100645
-
你在用mongoid吗?
-
很慢? 10 秒太糟糕了,尤其是对于几百条记录。
-
(3) : 你可以在显示页面之前抓取所有的
PeopleOrg记录并尝试在视图中查找它们:@people_orgs_grouped_by_name = PeopleOrg.where(name: @people.pluck(:name)).group_by(&:name),然后在视图中使用if @people_orgs_grouped_by_name[p.name].present?等( 1) 是的,您应该在不使用名称的情况下定义两个模型之间的关系,因为 Bob (id 1) 与 Bob (id 2) 不同,但仍会被这段代码抓取
标签: ruby-on-rails ruby mongodb erb findby