Question

function (doc) {
  if(doc.jsonType == 'cart') {
    if((Date.parse(doc.updated_at) + (15 * 60000)) >= Date.now()) {
      for(item in doc.items) {
        emit(item, doc.items[item].quantity);
      }
    }
  }
}

Avec cette fonction, j'obtiens les documents qui ont été mis à jour au cours des 15 dernières minutes, par exemple 2, avec les quantités 1 et 2, ce qui devrait donner 3 comme somme.Cependant, lorsque j'utilise la fonction de réduction intégrée _sum, j'obtiens 32 (somme de toutes les lignes existantes).

J'ai mis à jour les vues plusieurs fois, mais je n'obtiens toujours pas les bons résultats.

Qu'est-ce qui ne va pas?

Était-ce utile?

La solution

C'est une erreur d'utiliser Date.now() dans les fonctions mapper (et réduire).Les résultats des cartes/réductions sont enregistrés sur le disque pour une récupération rapide au moment de la requête.La valeur de Date.now() vous obtenez, c'est celui du moment où la carte a été construite, pas lorsqu'elle est interrogée.Vous pouvez trouver du matériel d'introduction sur le fonctionnement des cartes CochDB sur le wiki et Le guide définitif.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top