[Pouchdb][Cloudant][Big data] MonEtablissement : Faire un premier Map Reduce en 10 minutes dans l’app

monetablissement.jpg

pouch                    cloudant

Introduction


On fait un premier map reduce qui a pour but simple d’afficher le nombre d’établissements par régions.

Tester l’application updatée ici :


http://nicolas.huleux.free.fr/pouchdb3/

Comment faire ?


Deux solutions, soit on crée la requête de création de Map Reduce avec JS, qui ensuite la crée dans Cloudant , soit on crée directement la requête sur cloudant .

Dans les deux cas, on va ensuite quérir la requête map reduce dans notre front end JS, avec l’api pouchDb.

Il faut également utiliser la lib suivante : pouchdb.find.js

Je choisis de créer ma requête Map Reduce directement dans l’interface Cloudant à cet endroit (Design Document/ Create view ) :

etab.jpg

Voilà, le résultat de notre requête Map réduce est désormais disponible dans notre application, dans notre fichier app.js dans cette fonction :

function mapReduce() {
	db.query('commune/map1', {
		reduce: true,
		group: true
	}).then(function(res) {
		console.log(res);
		// got the query results
	}).catch(function(err) {
		console.log(err);
		// some error
	});
}

Noter qu’il faut spécifier reduce :true et group:true pour que la function de reduce soit prise en compte.

Pour plus d’informations c’est ici :
https://pouchdb.com/guides/queries.html

Afin d’afficher le résultat map reduce dans notre application web, on modifie la fonction comme ceci, afin que jquery itère sur les résultats puis les affiche dans l’app , dans notre div #liste :

function mapReduce() {
	db.query('commune/map1', {
		reduce: true,
		group: true
	}).then(function(results) {
		$("#liste").empty(); // On vide le précédent formulaire.
		// On crée une ligne pour chaque résultat retourné
		for (x = 0; x < results.rows.length; x++) {
			if (results.rows[x].key != null) {
				$("#liste").append("<span ><Label> <b>" + results.rows[x].key + "</b></label><br> Quantité: " + results.rows[x].value + " établissements</span><br><br>");
			}
		}
	}).catch(function(err) {
		console.log(err);
		// some error
	});
}
Publicités