0

2 つのコレクションを地理クエリする方法を見つけようとしています。

  1. Person {name, age, groupid}
  2. Groups (id, name, geoLocation[x,y])

次のような人がいる近くのグループをすべて見つける必要がありますage > 18

見つかった人ごとにグループを照会することなく、それを行う方法はありますか?

4

1 に答える 1

1

MongoDB には結合がないため、これを回避する別の方法を見つける必要があります。

私が考える次のもっともらしい方法は、年齢範囲の配列をグループ レコードに格納することです。

{
    _id: {},
    name: {},
    geoLocation: {},
    age_groups: {
        'gt18': 1
    },
}

次に、その age_groups.gt18 フィールドに対してクエリを実行し、すべてのレコードを抽出します。もちろん、これは、このフィールドを最新の状態に保つために何かが必要になることを意味します。いくつかの方法があります。

  • MR (Map Reduce) 実際には、最初に集計テーブルに出力する必要があるため、あまりお勧めしません。
  • イベントベースの事前集計。ユーザーがグループに参加または脱退すると、年齢が取得され、それに応じて集計フィールドが更新されます。

個人的には、イベントベースの事前集計方法を使用します

于 2012-08-09T16:50:21.220 に答える