pouchdb에서 Map/reduce query 사용하기

Map/reduce는 pouchdb에서 매우 강력한 기능중 하나이며, query() API로 알려져 있다.

Map/Reduce

PouchDB query() API(couchDB에서는 _view API를 의미함)는 temporary query와 persistent query 두가지 모드가 있다.

  1. temporary query
    – temporary query는 map function을 사용하지 않는 쿼리로 심플하지만 느리다. 주로 개발중 debugging 용으로만 사용할 것을 추천한다.

    // pouchDB에서 name필드를 key로 해서 'foo'에 해당하는 _id와 key값을 찾는 쿼리
    
    db.query(function (doc, emit) {
     emit(doc.name);
    }, {key: 'foo'}).then(function (result) {
     // found docs with name === 'foo'
    }).catch(function (err) {
     // handle any errors
    });
  2. persistent query
    – persistent query는 매우 빠르고, 제품화하는 app에서 사용하는 query이다.
    – 이를 사용하기 위해서는 2단계의 과정이 있다.1단계) design document 생성

    // document that tells PouchDB/CouchDB
    // to build up an index on doc.name
    var ddoc = {
     _id: '_design/my_index',
     views: {
     by_name: {
     map: function (doc) { emit(doc.name); }.toString()  //map 설정 마지막에 문자열(.toString())포맷은 JSON 객체로 받기 위해 필요하다.
     }
     }
    };
    // save it
    pouch.put(ddoc).then(function () {
     // success!
    }).catch(function (err) {
     // some error (maybe a 409, because it already exists?)
    });

     

    2단계) 생성한 design document를 활용해서 query를 사용한다.

    
    
    db.query('my_index/by_name').then(function (res) {
     // got the query results
    }).catch(function (err) {
     // some error
    });

     

 

Share

Leave Comment

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다