2つのクエリを発行できます。(私が書いたクエリはJavaScriptで書かれています)
最初のクエリは、名前が。で始まるすべての会社を抽出しますwha。
db.companies.find({name: {$regex: "^wha"}}, {_id: 1})
2番目のクエリは次のようになります
db.employees.find({homelocation: {$near: [x,y]}, companies_worked_in: {$in: [result_from_above_query]} }, {companies_worked_in: 1})
ここで、companys_worked_inをフィルタリングし、名前が。で始まる会社のみを指定しwhaます。この場合、最初のクエリは役に立たないようです。ただし、多くのレコードは$inクエリでフィルタリングされます。
この2つのクエリの間に中間コードを記述しなければならない場合があります。私はこれが単一のクエリソリューションではないことを知っています。ただし、これは1つの可能な方法であり、インデックスを作成するフィールドによってはパフォーマンスも良好です。この場合、name(会社のコレクション)とhomelocation(geo-index)+ companies_worked_in(従業員のコレクション)にインデックスを作成すると、パフォーマンスを向上させることができます。
PSどちらも配列であるため、homelocationと
の上に複合インデックスを作成できるかどうかは疑問です。companies_worked_inこれらのフィールドの1つだけにインデックスを付ける必要があります。複合インデックスを作成できない場合があります。
提案
会社名も従業員コレクションに保存します。そうすれば、最初のクエリを回避できます。