たとえば、同期機能を動的に変更する方法はありますか。ドキュメントにフィールド ID があり、特定の ID に属するドキュメントを取得したいので、ここでは ID を変数にします。例えば。以下はID=4の同期関数です
"sync":
function (doc) {
if(doc.ID==4){
channel (doc.channels);
}
else{
throw({forbidden: "Missing required properties"});
}
},
これは ID=4 でのみ機能します。同期機能を動的にするにはどうすればよいですか。同期関数に引数を与える方法はありますか?
EDIT 1追加のユースケース
わかりましたので、私のユースケースはこのようなものです。ユーザーがログインしたときに、CouchBase Server から CouchBase lite にユーザー固有のデータを取得する必要があるアプリがあります。My CouchBase Server には 20000 個のドキュメントがあり、ユーザーごとに 5 個のドキュメントがあるため、(20000/5) 4000 人のユーザーがいます。したがって、ユーザーがアプリにログインすると、CouchBase サーバーは、20000 個のドキュメントすべてではなく、そのユーザーに関連する 5 つのドキュメントのみを送信する必要があります。
編集2
これが私がレプリケーションを実装した方法です
private URL createSyncURL(boolean isEncrypted){
URL syncURL = null;
String host = "http://172.16.25.108";
String port = "4986";
String dbName = "sync_gateway";
try {
//syncURL = new URL("http://127.0.0.1 :4986/sync_gateway");
syncURL = new URL(host + ":" + port + "/" + dbName);
} catch (Exception me) {
me.printStackTrace();
}
Log.d(syncURL.toString(),"URL");
return syncURL;
}
private void startReplications() throws CouchbaseLiteException {
Log.d(TAG, "");
Replication pull = database.createPullReplication(this.createSyncURL(false));
Replication push = database.createPushReplication(this.createSyncURL(false));
Authenticator authenticator = AuthenticatorFactory.createBasicAuthenticator("an", "1234");
pull.setAuthenticator(authenticator);
//push.setAuthenticator(authenticator);
List<String> channels1 = new ArrayList<String>();
channels1.add("u1");
pull.setChannels(channels1);
pull.setContinuous(true);
// push.setContinuous(true);
pull.start();
//push.start();
if(!push.isRunning()){
Log.d(TAG, "MyBad");
}
/*if(!push.isRunning()) {
Log.d(TAG, "Replication is not running due to " +push.getLastError().getMessage());
Log.d(TAG, "Replication is not running due to " +push.getLastError().getCause());
Log.d(TAG, "Replication is not running due to " +push.getLastError().getStackTrace());
Log.d(TAG, "Replication is not running due to " +push.getLastError().toString());
}*/
}