Skip to content

Instantly share code, notes, and snippets.

@jefbarn
Created February 11, 2017 19:37
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save jefbarn/47e8d658059df9def7e235e8f4ea8725 to your computer and use it in GitHub Desktop.
Save jefbarn/47e8d658059df9def7e235e8f4ea8725 to your computer and use it in GitHub Desktop.
Using Pouchdb _selector plug-in
import PouchDB from 'pouchdb-browser' // Or however you are importing PouchDB using your module system
PouchDB.plugin((PouchDB) => { // Add the 'plug-in' to the Pouchdb instance
let pouchReplicate = PouchDB.replicate
PouchDB.replicate = (source, target, repOptions) => {
let sourceAjax = source._ajax
source._ajax = (ajaxOps, callback) => {
if (ajaxOps.url.includes('_selector')) {
ajaxOps.url = ajaxOps.url.replace('filter=_selector%2F_selector', 'filter=_selector')
ajaxOps.method = 'POST'
ajaxOps.body = {
selector: repOptions.selector
}
}
return sourceAjax(ajaxOps, callback)
}
return pouchReplicate(source, target, repOptions)
}
})
let remotedb = new PouchDB('http://my.couchd.db:5984/database')
// put some docs in the remote db
remotedb.bulkDocs([
{kind: 'apple'},
{kind: 'orange'},
{kind: 'pear'}
])
let localdb = new PouchDB('mydb')
PouchDB.replicate(remotedb, localdb, {
filter: '_selector',
selector: {
kind: {
$in: [
'apple',
'pear',
]
}
}
})
// Now localdb only has 'apple' and 'pear' documents
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment