私はアンドロイドとウェブアプリケーションを持っています。 AndroidアプリはCouchbase Liteを使用し、WebアプリはCouchbaseを使用します。私はCouchbase Sync Gatewayを使用して、これら2つのデータベース間のデータ複製を有効にしています。Couchbase Liteフィルタリングされたプルレプリケーション
ユーザーがモバイルアプリに初めてログインしたときに、この特定のユーザーのデータ(ユーザー名に基づいて)をレプリケートしたいと思います。フィルタリングされたレプリケーションはCouchbase Lite (1)でサポートされていると読んでいますが、どの方法を使用すべきかはかなり混乱しています。私が何をしたいか
はthisに少し似ているので、私は私のフィルタ機能は次のようになります推測:
function (doc, req) {
if(doc.DocType && doc.DocType == "User" && doc.IsActive && doc.Login == req.query.text)
{ return true }
else
{return false}
}
が、私は、私は私のウェブで(この関数を作成する必要がない考えを持っていないしましたアプリケーションコード?私はDesignDocument.create()
しか見つけられませんでしたが、View関数のみを挿入します)。
私はこれをSyncGatewayで読んでいますが、私はチャンネルを使うべきですが、私はチャンネルの基本を文書の静的なプロパティに基づいて理解しており、ユーザー名を動的パラメータとして使用する必要があります。
この特定のドキュメントのみを複製する方法はありますか?
編集。
だから、以前に私のSyncGateway設定の同期プロパティは、のようだった:
"sync":`
function (doc) {
channel (doc.channels);
}`
、それはファイラなく正常に働いていました。私はにそれを回し:
"sync":`
function (doc, oldDoc) {
if(doc.DocType=="User" && doc.IsActive){
channel(doc.Login);
}
else {
channel (doc.channels);
}
}`
と私のJavaメソッドは次のとおりです。
public void startFirstLoginReplication(String login, String password) throws CouchbaseLiteException{
(...)
pull = DatabaseManager.getDatabaseInstance().createPullReplication(this.createSyncURL(false));
List<String> channels = new ArrayList<String>();
channels.add(login);
pull.setChannels(channels);
pull.setContinuous(false);
pull.start();
progressDialog = showLoadingSpinner();
pull.addChangeListener(this);
}
通常のレプリケーションでは、それが呼び出されたchanged()
方法を更新されました。フィルタを使用すると、何も引っ張られずにprogressDialogがスタックされます。 SyncGatewayコンソールで
私が取得:
2016-06-27T23:45:46.081+02:00 HTTP: #003: GET /kris_mobile_db/_local/01ef0a1ec2301f9f9f3bb2fae9d352d26fd4a9a7
2016-06-27T23:45:46.094+02:00 HTTP: #003: --> 404 missing (14.5 ms)
2016-06-27T23:45:46.300+02:00 HTTP: #004: POST /kris_mobile_db/_changes
2016-06-27T23:45:46.301+02:00 Changes: MultiChangesFeed({Mo}, {Since:0 Limit:0 Conflicts:true IncludeDocs:false Wait:false Continuous:false Terminator:0xc08245cba0 HeartbeatMs:300000 TimeoutMs:300000}) ...
2016-06-27T23:45:46.301+02:00 Changes+: MultiChangesFeed: channels expand to channels.TimedSet{"Mo":0x1} ...
2016-06-27T23:45:46.301+02:00 Changes+: MultiChangesFeed sending &{Seq:1 ID:_user/GUEST Deleted:false Removed:{} Doc:map[] Changes:[] Err:<nil> branched:false}
2016-06-27T23:45:46.302+02:00 Changes: MultiChangesFeed done
私は何をしないのですか?
こんにちは@jamiltzだけではなく、文字列の配列であることを!忘れないでください私は私の質問を更新し、あなたがそれを見てみることができれば感謝します。 – Mohru