当我加载Material扩展时,如下所示: [在此输入图像说明] [1]
[在此输入图像说明] [2]
但失败〜
var db = new PouchDB('friendsdb');
var docs = [
{'_id': '1', 'number': 10, 'values': '1, 2, 3', 'loto': 'fooloto'},
{'_id': '2', 'number': 12, 'values': '4, 7, 9', 'loto': 'barloto'},
{'_id': '3', 'number': 13, 'values': '9, 4, 5', 'loto': 'fooloto'}
];
db.bulkDocs(docs).then(function(result) {
querySum();
queryLargest();
querySmallest();
queryAverage();
}).catch(function(err) {
console.log(err);
});
function querySum() {
function map(doc) {
// the function emit(key, value) takes two arguments
// the key (first) arguments will be sent as an array to the reduce() function as KEYS
// the value (second) arguments will be sent as an array to the reduce() function as VALUES
emit(doc._id, doc.number);
}
function reduce(keys, values, rereduce) {
// keys:
// here the keys arg will be an array containing everything that was emitted as key in the map function...
// ...plus the ID of each doc (that is included automatically by PouchDB/CouchDB).
// So each element of the keys array will be an array of [keySentToTheEmitFunction, _idOfTheDoc]
//
// values
// will be an array of the values emitted as value
console.info('keys ', JSON.stringify(keys));
console.info('values ', JSON.stringify(values));
// check for more info: http://couchdb.readthedocs.io/en/latest/couchapp/views/intro.html
// So, since we want the sum, we can just sum all items of the values array
// (there are several ways to sum an array, I'm just using vanilla for to keep it simple)
var i = 0, totalSum = 0;
for(; i < values.length; i++){
totalSum += values[i];
}
return totalSum;
}
db.query({map: map, reduce: reduce}, function(err, response) {
console.log('sum is ' + response.rows[0].value);
});
}
function queryLargest() {
function map(doc) {
emit(doc._id, doc.number);
}
function reduce(keys, values, rereduce) {
// everything same as before (see querySum() above)
// so, this time we want the larger element of the values array
// http://stackoverflow.com/a/1379560/1850609
return Math.max.apply(Math, values);
}
db.query({map: map, reduce: reduce}, function(err, response) {
console.log('largest is ' + response.rows[0].value);
});
}
function querySmallest() {
function map(doc) {
emit(doc._id, doc.number);
}
function reduce(keys, values, rereduce) {
// all the same... now the looking for the min
return Math.min.apply(Math, values);
}
db.query({map: map, reduce: reduce}, function(err, response) {
console.log('smallest is ' + response.rows[0].value);
});
}
function queryAverage() {
function map(doc) {
emit(doc._id, doc.number);
}
function reduce(keys, values, rereduce) {
// now simply calculating the average
var i = 0, totalSum = 0;
for(; i < values.length; i++){
totalSum += values[i];
}
return totalSum/values.length;
}
db.query({map: map, reduce: reduce}, function(err, response) {
console.log('average is ' + response.rows[0].value);
});
}
更多细节: issue_link