2011-09-30 2 views
2

je la vue suivante sur CouchDB qui ne retournera docs avec une date supérieure à la date actuelle comme:CouchDB pas vue la mise à jour des événements à venir et passés

function (doc) { 

    var eventDay = new Date(new Date(doc.start).toDateString()), 
     currentDay = new Date(new Date().toDateString()); 

    if (eventDay > currentDay) { 
     emit(); 
    } 
} 

Donc, dans ce cas, la vue montrera toujours Futurs événements (à venir) seulement. J'ai aussi la même vue inversée pour montrer seulement les événements passés. Mais le problème est que, apparemment, la vue n'est pas mise à jour le jour suivant. Donc, je dois mettre à jour la vue manuellement en ajoutant quelques sauts de ligne et donc je suppose que cela provoque un 'rafraîchissement'.

Des idées sur comment je pourrais faire ce travail?

Merci beaucoup

Répondre

3

Ne pas oublier que le code de la carte par entrée est exécutée sur la création de documents/changement, donc vous ne serez pas avoir des valeurs cohérentes pour ce que vous considérez comme « currentDay ». Au lieu de cela, vous devez créer une vue qui vous permet d'ajouter ces informations pendant la requête. Voici un exemple:

funciton(doc){ 

    //Extract from date object. 
    var year = ..; 
    var month = ..; 
    var day = ..; 
    //.. 

    emit([year,month,day], null); 
} 

Cela va créer un index complexe, classé par (année, mois, jour). Vous pouvez maintenant interroger des plages partielles, par exemple toutes les dates dans le futur, en utilisant startkey/endkey. S'il vous plaît voir l'API View pour plus de détails: http://wiki.apache.org/couchdb/HTTP_view_API

+0

merci beaucoup pour ce PartlyCloudy. Donc, vous vouliez dire que les vues ne seront pas rafraîchies jusqu'à ce qu'un document soit créé ou mis à jour? d'où la nécessité d'interroger avec des clés de début et de fin puisque ces valeurs seraient différentes chaque jour et produiraient alors des résultats cohérents? – zanona

+0

Pensez à l'index de vue sous la forme d'une liste triée qui sera mise à jour de façon incrémentielle lors des changements - de nouveaux documents seront insérés, les documents modifiés seront réinsérés. Votre attribut "jour actuel" est quelque chose dont vous avez besoin pendant votre requête, pas lors de la création de la vue. En un mot, vous aurez une longue liste de documents triés (par date) et des plages partielles de requêtes en utilisant startkeys et endkeys. –

+2

+1. À droite, les vues sont un moyen de construire un index complètement * statique * des données d'origine. L'index peut être mis à jour de manière incrémentielle au fur et à mesure que les documents changent, mais pour l'essentiel, il reste presque immobile. Lorsque vous interrogez la vue, CouchDB analyse toujours l'index. C'est rapide et prévisible. Le seul contrôle que vous avez est le 'startkey' et' endkey' par requête. – JasonSmith

Questions connexes