2012-06-05 5 views
3

J'ai lu quelques articles décrivant des méthodes de stockage de données pour des événements récurrents, mais j'essaie toujours de comprendre ce qui se fait de mieux, en particulier en ce qui concerne MongoDB.Schéma des événements récurrents avec MongoDB

Ma principale préoccupation est de récupérer à peu de frais tous les événements qui se produisent dans un délai donné. Ma préoccupation secondaire est de modifier et de modifier les occurrences uniques sans prendre la chaine de l'événement entier hors de propos. En regardant d'autres personnes qui ont posé des questions similaires, j'ai trouvé une possibilité. Je ne suis pas complètement vendu dessus, et aimerais quelques pointeurs dans la bonne direction.

Mon Idée: Au sein de chaque document de l'événement, ont ...

  • un champ de chaîne récurrente qui correspond étroitement à la norme iCal
  • un document intégré « événements » ou d'un champ tableau qui contient les modifications/modifier sur des occurrences spécifiques (telles que la modification de la description ou de l'heure de début, ou l'annulation d'une occurrence unique).
  • un événement de début et champ de fin pour définir les limites facilement requêtés de la règle de récurrence

Plus:

  • capable de stocker les changements et maintenir encore l'association à d'autres événements
  • facilement interrogé, mon modèle sur le côté des affaires devrait construire chaque événement si

Cons/problèmes potentiels:

  • si l'édition d'un événement, et un utilisateur décide de marquer les changements que l'application de « tous les événements » - comment garder les événements qui ont déjà passé d'être modifié
+0

Je suis confronté à la même question sur un projet. Qu'avez-vous fini par utiliser? –

Répondre

2

Cela semble être une bonne approche moi. Pour "garder les événements qui ont déjà passé d'être modifiés" simplement les marquer avec un drapeau booléen qui le dit. Vous devriez facilement pouvoir utiliser cet indicateur et la date de début/fin lors de l'interrogation et de la mise à jour. - - définir une date de fin pour l'événement d'origine - cloner l'événement et définir une nouvelle date de début et de fin pour le nouvel événement. - vider le champ occurences sur l'événement cloné

Quelque chose comme faire:

Avant:

{ 
    'title' : "Gin O'Clock", 
    'recurrance' : 'DAILY', 
    'start_date' : '2012-01-01 17:00', 
    'end_date' : false, 
    'occurences' : [ 
     { 'date' : '2012-06-03 17:00', 'title' : "Jubilee Gin O'Clock" } 
    ] 
} 

Après:

{ 
    'title' : "Gin O'Clock", 
    'recurrance' : 'DAILY', 
    'start_date' : '2012-01-01 17:00', 
    'end_date' : '2012-06-05 17:00, 
    'occurences' : [ 
     { 'date' : '2012-06-03 17:00', 'title' : "Jubilee Gin O'Clock" } 
    ] 
}, 
{ 
    'title' : "Gin O'Clock an our earlier", 
    'recurrance' : 'DAILY', 
    'start_date' : '2012-06-06 16:00', 
    'end_date' : false, 
    'occurences' : [ 
    ] 
} 

Hope that helps!

+1

Qu'en est-il de l'ajout d'une sorte de logique dans le champ des occurrences qui permet à une occurrence de remplacer les occurrences futures ...comme ceci: '{'recurrence': 'DAILY', 'start': '2012-01-01 17:00', 'end': false, 'occurrences': [{'start': '2012-01- 04 17:00 ',' end ': false,' récurrence ':' HEBDOMADAIRE '}}} 'Cela serait interprété comme l'événement se déroule quotidiennement du premier au quatrième. Ensuite, toutes les occurrences après le 4 sont hebdomadaires. –

Questions connexes