2012-11-28 5 views
1

Newbe question sur la façon d'interroger MongoDB. Je souhaite prendre plusieurs objets reçus chaque jour et les agréger en un seul jour. La structure du document contiendra éventuellement 365 jours de données (par an, avec un nouveau document par an peut-être) dans le format suivant:mongodb modélisation de données de série temporelle

{ 
"2012": { 
    "9": { 
     "1": { 
      "attribute1": 42.1, 
      "attribute2": 5.895, 
      "attribute3": 2347, 
      "attribute...n": 33076.875, 
      "startFuel": [ 
       32976.75, 
       33018.875, 
       33041.375 
      ], 
      "startOdometer": [ 
       202748.9, 
       202973, 
       203100.2 
      ], 
      "endOdometer" : 209855.6 
     }, 
     "10": { 
      "attribute1": 363.90000000000003, 
      "attribute2": 59.242000000000004, 
      "attribute3": 20284, 
      "attribute...n": 34335.375, 
      "startFuel": [ 
       34161, 
       34214.125, 
       34245.25, 
       34280.875 
      ], 
      "startOdometer": [ 
       209855.6, 
       210166.4, 
       210348.2, 
       210555.7 
      ], 
      "endOdometer" : 210655.7 
     } 
    } 
}, 
"_id": ObjectId("50b6838a6ef6585a9e51f2af"), 
"key1": null, 
"keu2": -1, 
"key3": 572755 
} 

Comme vous pouvez le voir, chaque document appartient à une entité, une année contient chaque mois et chaque mois a chaque jour (tant qu'il y a des données pour ce jour/mois/année).

Je suis aux prises avec la façon d'interroger ce format de document. Je souhaite utiliser le cadre d'agrégation pour faire la moyenne des valeurs dans un document (pour une seule entité) et les agréger entre plusieurs documents/entités au cours de la même période. Par exemple, je voudrais trouver les miles moyens parcourus chaque jour au mois d'août (pour chaque entité, pour chaque jour du mois, soustrayez le plus bas startOdometer de l'odomètre d'origine et faites la moyenne des valeurs sur le mois) . (BTW: le startOdometer est un tableau pour me permettre de pousser les valeurs sans pré-interroger le document pour voir s'il est déjà présent). Nous avons un débat interne si nous devons utiliser map/reduce pour créer TOUTES les vues agrégées dans nos données ou si nous pouvons utiliser map/reduce pour créer les résumés de jour et utiliser le cadre d'agrégation pour tirer le données ensemble. Je voudrais savoir comment cette structure de données supporterait ce type de requête, ou quelle autre structure de données pourrait être plus appropriée pour nous permettre de tirer parti du cadre d'agrégation pour résumer nos données.

+2

Un schéma dynamique comme celui-ci est très difficile à interroger. Il vaudrait mieux retravailler votre schéma pour utiliser des noms de clés fixes et laisser le contenu dynamique aux valeurs. – JohnnyHK

+0

vous dites "les agréger en un enregistrement de jour" mais vous dites que le document contiendra une année de données - pouvez-vous clarifier? –

+0

Désolé, je n'ai pas vu votre réponse avant de travailler sur une autre question. L'idée était qu'un document contienne des années de données décomposées par jour. – pherris

Répondre

1

Un schéma dynamique comme celui-ci est très difficile à interroger. Il vaudrait mieux retravailler votre schéma pour utiliser des noms de clés fixes et laisser le contenu dynamique aux valeurs.

Questions connexes