1

请原谅我对 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) 也许有一种方法可以准备或更改数据以进行更有效的排序?

预先感谢您的帮助。

4

1 回答 1

0

如评论中所述,您可以利用MongoDB 聚合运算符 $lookup对另一个集合执行查找操作。

例如,在people集合中有 MongoDB 文档,如下所示:

{ "name": "Brandon", 
  "phone": 123456789 }

集合中的文档示例people_org如下:

{ "organisation": "NBCC", 
  "contact": "Brandon"}

您可以使用下面的MongoDB Ruby 聚合people示例按名称查找people_org

cursor = collection.aggregate([
                   {"$match":
                          {"name":"Brandon"}}, 
                   {"$lookup": 
                          {"from": "people_org", 
                           "localField": "name", 
                           "foreignField": "contact", 
                           "as": "organisation"}
                   }])
cursor.each do |document|
    puts document
end

请注意,$lookup仅自 MongoDB v3.2+ 起可用

于 2017-09-08T01:08:19.007 回答