2012-08-09 4 views
0

J'essaie de trouver un moyen de géo Interroger deux collections:MongoDB Geo Recherche sur deux collections

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

Je dois trouver tous les groupes avec des personnes près de avec age > 18

Une idée de comment le faire sans avoir à interroger les groupes pour chaque personne trouvée?

Répondre

1

Vous n'avez pas de jointure dans MongoDB, vous devez donc trouver une autre solution.

La méthode suivante plausable je pense serait de stocker un tableau de tranches d'âge avec le record du groupe:

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

Et puis je voudrais simplement interroger sur ce champ age_groups.gt18 et tirer tous les enregistrements . Cela signifie, bien sûr, que vous aurez besoin de quelque chose pour garder ce champ à jour. Il y a deux méthodes:

  • MR (Map Reduce) Cela impliquerait en fait de sortir un tableau récapitulatif en premier, donc je ne le recommande pas vraiment.
  • Pré-agrégation basée sur les événements. Lorsqu'un utilisateur rejoint ou quitte un groupe, vous obtenez son âge et mettez à jour le champ agrégé de façon appropriée.

Personnellement, j'aller pour l'événement méthode fondée sur préagrégés de faire les choses

Questions connexes