Skip to content

Instantly share code, notes, and snippets.

@scriptmaster
Created February 10, 2018 02:22
Show Gist options
  • Save scriptmaster/d4a7cca6577e2a64e98fc1bb56c76e1b to your computer and use it in GitHub Desktop.
Save scriptmaster/d4a7cca6577e2a64e98fc1bb56c76e1b to your computer and use it in GitHub Desktop.

Revisions

  1. scriptmaster created this gist Feb 10, 2018.
    124 changes: 124 additions & 0 deletions couchdb filters design document
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,124 @@

    {
    "_id": "_design/filters",
    "_rev": "10-82eb7646e9ac6bc442fbf9ec383dfc3e",
    "filters": {
    "type": "function (doc, req) { return doc.type === req.query.type; }",
    "prop": "function (doc, req) { return doc[req.query.prop] === req.query.value; }",
    "name": "function (doc, req) { return doc.name && typeof(req.query.name)!='undefined'? doc.name.toLowerCase() == req.query.name.toLowerCase(): false }"
    },
    "language": "javascript",
    "views": {
    "by_type": {
    "map": "function (doc) {\n emit(doc.type, null);\n}",
    "reduce": "_count"
    }
    }
    }



    {
    _id: '_design/filters'
    ,
    filters: {
    type: function (doc, req) {
    return doc.type === req.query.type;
    }.toString()
    ,
    prop: function (doc, req) {
    return doc[req.query.prop] === req.query.data;
    }.toString()
    }
    }


    {
    "_id": "_design/filters",
    "_rev": "3-fdd5c251e3f53bac2418ff746c43a71e",
    "filters": {
    "type": "function (doc, req) { return doc.type === req.query.type; }",
    "prop": "function (doc, req) { return doc[req.query.prop] === req.query.value; }"
    },
    "language": "javascript",
    "views": {
    "by_type": {
    "map": "function (doc) {\n emit(doc.type, doc.name);\n}"
    }
    }
    }


    filters = await rdb.get('_design/filters')

    filters.filters.name = function(doc, req) { return doc.name.toLowerCase() == req.query.name.toLowerCase() }.toString()
    filters.filters.regex = function(doc, req) {
    if(!req.query.regex) return false;
    if(!doc[req.query.prop]) return false;
    return new RegExp(req.query.regex, req.query.regexOpts||'i').test(doc[req.query.prop])
    }.toString()


    (const validate = function(){return false};)

    await rdb.put(filters)


    c2 = await rdb.changes({
    filter: 'filters/name',
    query_params: {name: 'Todo 1'}
    })


    /*


    db.changes({
    filter: 'filters/type'
    });

    {
    _id: '_design/filters',
    filters: {
    type: function (doc, req) {
    return doc.type === req.query.type;
    }.toString()
    }
    }


    db.changes({
    filter: 'filters/type',
    query_params: {type: 'company'}
    });

    db.changes({
    filter: 'filters/type',
    query_params: {type: 'todo'}
    });

    db.changes({
    filter: 'filters/prop',
    query_params: {prop: name, type: 'todo'}
    });


    {
    _id: '_design/views',
    views: {
    myview: function (doc) {
    if (doc.type === 'marsupial') {
    emit(doc._id);
    }
    }.toString()
    }
    }

    db.changes({
    filter: '_view',
    view: 'mydesign/myview'
    });


    */