2012-07-11 7 views
0

modèle checkin:groupe MongoDB par/requête distincte

checkin 
    _id 
    interest_id 
    author_id 

J'ai une collection de checkins (par une simple requête résolus « trouver ») Je voudrais compter le nombre de checkins pour chaque intérêt. Ce qui rend la tâche un peu plus difficile - nous devrions compter deux checkins d'une personne et un intérêt comme un checkin. AFAIK, les opérations de groupe en mongo sont effectuées par requête map/reduce. Devrions-nous l'utiliser ici? La seule idée que j'ai avec une telle approche est d'agréger le tableau des utilisateurs pour chaque intérêt, puis retourner la longueur de ce tableau. J'ai fini avec ne pas utiliser map/reduce du tout, bien que la réponse d'Emily a bien fonctionné & rapidement. Je dois sélectionner seulement les checkins des 60 dernières minutes, et il ne devrait pas y avoir trop de résultats. Donc, je les ai tous au pilote Ruby, et faire tous les calculs sur le côté rubis. C'est un peu plus lent, mais beaucoup plus évolutif et facile à comprendre.

mieux, Roman

Répondre

1

Carte réduire serait probablement la voie à suivre pour cela et vous pouvez obtenir les résultats souhaités avec deux carte réduit.

Dans le premier cas, vous pouvez supprimer les paires author_id et interest_id en double.

  • clé serait AUTHOR_ID et interest_id
  • valeurs seraient checkin_id

La deuxième carte réduire serait juste un compte du nombre de checkins par un author_id donné.

  • clé serait AUTHOR_ID
  • valeur serait checkin_id nombre
+0

merci, mais je suppose que vous voulez dire un décompte du nombre de checkins par un ** donné interest_id ** au lieu de author_id? –

+0

Oui, je suis désolé, je viens de relire votre question et vous comptez par intérêt_id, pas author_id. –