MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Stratégies pour les agrégations en temps réel dans MongoDB

Il semble que vous ayez ajouté deux champs age_rank , average_age . Ce sont effectivement des champs calculés basés sur les données dont vous disposez déjà. Si je vous ai donné le document avec les pages vues et les anniversaires des utilisateurs, il devrait être vraiment trivial pour le code client de trouver min/max, moyenne, etc.

Il me semble que vous demandez à MongoDB d'effectuer l'agrégation pour vous côté serveur. Mais vous ajoutez la limitation que vous ne voulez pas utiliser Map/Reduce ?

Si je comprends bien votre question, vous cherchez quelque chose où vous pouvez dire "ajouter cet élément à un tableau et faire en sorte que tous les éléments dépendants se mettent à jour" ? Vous ne voulez pas que les lecteurs exécutent une logique, vous voulez que tout se passe "magiquement" côté serveur.

Il existe donc trois façons différentes de résoudre ce problème, mais une seule d'entre elles est actuellement disponible :

  1. Écrivez cette logique côté client. Cela ne ressemble pas à la solution que vous souhaitez, mais cela fonctionnera. Si vous avez les données sous-jacentes, faire un max/min/med/avg devrait être assez simple dans la plupart des langues.
  2. Exploitez les fonctionnalités à venir pour Agrégation . Celles-ci ne sont pas planifiées avant la version 1.9.x. Une agrégation améliorée permettra d'extraire les données que vous recherchez, cependant, vous devrez toujours écrire les requêtes appropriées. La base de données sous-jacente ne contient toujours pas les données que vous recherchez.
  3. Vous avez besoin de déclencheurs . Si vous voulez vraiment que la base de données soit toujours cohérente et contienne des données résumées, c'est ce dont vous avez besoin. Cependant, la fonctionnalité de déclencheurs n'existe pas encore.

Malheureusement, votre seule option en ce moment est la #1. Heureusement, je connais plusieurs personnes qui utilisent l'option 1 avec succès.