Michael Pickett Michael Pickett - 2 months ago 18
Javascript Question

Apache CouchDB Filtered replication with javafx

I am using CouchBaseLite on javafx with Apache CouchDB, specifically the FUTON interface. I currently have a filter function working,

{"orgId":
"function(docu, req) {
if(docu.orgId == req.query.orgId && docu.doc == req.query.doc)
return true;
else
return false;
}"}


I am currently setting the filters by doing,

Map<String, Object> params = new HashMap<>();
Map<String, Object> params2 = new HashMap<>();
Map<String, Object> params3 = new HashMap<>();
Map<String, Object> params4 = new HashMap<>();

params.put("orgId", 0);
params.put("doc", "doc1");
params2.put("orgId", 0);
params2.put("doc", "doc2");
params3.put("orgId", 0);
params3.put("doc", "doc3");
params4.put("orgId", 0);
params4.put("doc", "doc4");

pullDoc1.setFilterParams(params);
pullDoc2.setFilterParams(params2);
pullDoc3.setFilterParams(params3);
pullDoc4.setFilterParams(params4);

pullDoc1.start();
pullDoc2.start();
pullDoc3.start();
pullDoc4.start();


Where doc# are doc types. and pullDoc# are Pull Replications.

I was wondering if there was a way to leverage using an ArrayList or List of Strings as a parameter as opposed having 4 separate pull replications for each doc type.

So to recap my questions are


  1. Is there a way to leverage using an ArrayList or List of Strings as a parameter?

  2. What would the javascript of my filter function look like?

  3. What would my javafx code look like?



Thank you.

Answer

As you described it, I updated your code so you can use a filter function with many doc value.

Filter function

function(docu, req) {
    if (docu.orgId == req.query.orgId && docu.doc != null && req.query.docs.indexOf(docu.doc) > -1)
        return true;
    else
        return false;
}

Java code for params

    //We create our param associated array
    Map<String, Object> params = new HashMap<>();
    //Here can pu the orgId. This is a single value
    params.put("orgId", 0); 

    //Here we send an array of doc that we want to get.
    params.put("docs", new String[]{"doc1", "doc2", "doc3", "doc4"});

If you have any other questions, feel free to ask.

Comments