Les résultats de la vue Couchbase diffèrent selon la fonction de réduction
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?
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.