- Get index.js and test.js in the same (otherwise empty) directory.
- Execute the following commands:
npm install pouchdb memdown pouchdb-abstract-mapreduce evaljs
node test.js
| var abstractMapReduce = require('pouchdb-abstract-mapreduce'); | |
| var evaljs = require('evaljs'); | |
| var methods = abstractMapReduce({ | |
| name: 'evaljsviews', | |
| mapper: function (mapFunDef, emit) { | |
| var env = new evaljs.Environment({emit: emit}); | |
| return env.gen('(' + mapFunDef + ')')(); | |
| }, | |
| reducer: function (reduceFunDef) { | |
| // TODO | |
| }, | |
| ddocValidator: function (ddoc, viewName) { | |
| // TODO | |
| } | |
| }); | |
| exports.evaljsQuery = methods.query; | |
| exports.evaljsViewCleanup = methods.viewCleanup; |
| var PouchDB = require('pouchdb'); | |
| var plugin = require('./index'); | |
| PouchDB.plugin(plugin); | |
| var db = new PouchDB('test', {db: require('memdown')}); | |
| db.bulkDocs([ | |
| { | |
| _id: '_design/test', | |
| views: { | |
| test: { | |
| map: function (doc) { | |
| // a relatively 'complicated' view | |
| for (var i = 0; i < doc.roles.length; i++) { | |
| var role = doc.roles[i]; | |
| if (role.indexOf('a') === -1) { | |
| emit(role); | |
| } | |
| } | |
| }.toString() | |
| } | |
| } | |
| }, | |
| { | |
| roles: ['b', 'c', 'a'] | |
| }, | |
| { | |
| roles: ['e', 'f', 'b'] | |
| } | |
| ]).then(function () { | |
| return db.evaljsQuery('test/test'); | |
| }).then(function (resp) { | |
| console.log(resp.rows.map(function (item) { | |
| return item.key; // [ 'b', 'b', 'c', 'e', 'f' ] | |
| })); | |
| }); |