2016-09-13 1 views
0

J'utilise CouchBaseLite sur javafx avec Apache CouchDB, en particulier l'interface FUTON. J'ai actuellement un travail de fonction de filtre,Apache CouchDB Réplication filtrée avec javafx

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

Je suis en train actuellement les filtres en faisant,

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(); 

Où # doc sont des types de doc. et pullDoC# sont des réplications Pull. Je me demandais s'il y avait un moyen de tirer parti d'un ArrayList ou d'une List of Strings en tant que paramètre, par opposition à 4 réplications de pull séparées pour chaque type de document.

Pour résumer mes questions sont

  1. Est-il possible de tirer parti de l'utilisation d'un ArrayList ou liste de chaînes comme paramètre?
  2. À quoi ressemblerait le javascript de ma fonction de filtre? A quoi ressemblerait mon code javafx?

Merci.

+0

Donc, vous essayez de tirer (avec un filtre), tous les documents qui ont un certain orgId et avec une propriété doc égale à l'une de ces valeurs [1,2,3, ...., n]? –

+0

Exactement. En ce moment j'y arrive en utilisant 4 répétitions de tirage séparées mais je préfère vraiment n'en utiliser qu'une seule. –

Répondre

0

Comme vous l'avez décrit, j'ai mis à jour votre code afin que vous puissiez utiliser une fonction de filtre avec beaucoup de valeur doc.

filtre fonction

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

code Java pour 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"}); 

Si vous avez d'autres questions, ne hésitez pas à demander.

+0

Cela a fonctionné! Merci, je n'ai même pas pensé à utiliser l'indexOf pour m'assurer que c'était un document approprié. –