0

place地理情報を含むmongodbオブジェクトをいくつか呼び出しましょう。例を見てください。

{
   "_id": "234235425e3g33424".
   "geo": {
             "lon": 12.23456,
             "lat": 34.23322
          }
   "some_field": "value"
}

ごとplaceに、機能のリストは次のものに関連付けられています。

{
  "_id": "2334sgfgsr435d",
  "place_id": "234235425e3g33424",
  "feature_field" : "some_value"
}

ご覧のとおり、フィールドのおかげで機能は場所にリンクされていplace_idます。今私は見つけたいです:features最も近いと接続されたリストplaces。ただし、とに検索条件も追加したいと思いplace.some_fieldますfeature.feature_field。そして、重要なことは結果を制限したいと思います。

今、私はそのようなアプローチを使用しています:

  1. places条件をオンgeoにしてクエリを実行しますsome_filed
  2. features条件をオンfeature_fieldにしてクエリを実行しますplace_id(1で見つかったものに限定してください)。
  3. アプリケーションコードの結果を制限します

私の質問は:そのようなタスクへのより良いアプローチはありますか?現在、mongolimit()関数を使用できません。これを実行placesすると、2番目のクエリを実行する必要があるため、結果が少なすぎる可能性があります。結果はランダムな順序で表示されるため、2番目のクエリを実行できませんlimit()。距離で並べ替えたいと思います。

1つのドキュメントにデータを入れることができることは知っていますが、リストfeaturesが長くなり、BSONのサイズ制限を超える可能性があると思います。

4

1 に答える 1

0

機能だけで 16 MB を使い果たすことはほとんどないように思えますが、可能です。あなたは 16MB がどれだけあるかを理解していないと思うので、仮定する前に計算してください!

いずれにせよ、MongoDB では、2 つのコレクションのフィールドを使用してクエリを実行することはできません。クエリは常に 1 つの特定のコレクションのみを扱います。私はあなたがここに持っているものと非常に似たようなことをしましたが、記事で説明しました: http://derickrethans.nl/indexing-free-tags.html — さらにインスピレーションを得るためにそれを見てください.

于 2013-01-31T14:27:55.850 に答える