0

我在 mongodb 数据库中有 2 个集合。例子:

employee(collection)
    _id
    name
    gender
    homelocation (double[] indexed as geodata)
    companies_worked_in (reference, list of companies)

companies(collection)
    _id
    name
    ...

现在我需要查询所有名称以“wha”开头并且拥有/拥有住在附近(13.444519, 52.512878)的员工的公司,即

我怎样才能做到这一点而不需要太长时间?使用 SQL,这将是一个简单的连接(当然没有地理空间搜索...... :()

4

1 回答 1

1

您可以发出 2 个查询。(我写的查询是用 JavaScript 编写的)

第一个查询提取名称以 开头的所有公司wha

db.companies.find({name: {$regex: "^wha"}}, {_id: 1})

第二个查询可以像

db.employees.find({homelocation: {$near: [x,y]}, companies_worked_in: {$in: [result_from_above_query]} }, {companies_worked_in: 1})

现在只需过滤 company_worked_in 并仅包含名称以 . 开头的公司wha。我知道在这种情况下,第一个查询似乎没用。但是很多记录会被 $in 查询过滤掉。

您可能必须在这两个查询之间编写一些中间代码。我知道这不是一个单一的查询解决方案。但这是一种可能的方法,性能也很好,具体取决于您索引的字段。在这种情况下,考虑在name(公司集合)和homelocation(地理索引)+ companies_worked_in(员工集合)上创建索引将帮助您获得性能。

PS 我怀疑您是否可以在homelocationand上创建复合索引companies_worked_in,因为两者都是数组。您必须仅对这些字段之一进行索引。您可能无法拥有复合索引。

建议 将公司名称存储在员工集合中。这样您就可以避免第一次查询。

于 2013-01-25T11:44:00.557 回答