私はアンドロイドとウェブアプリを持っています。Android アプリは Couchbase Lite を使用し、Web アプリは Couchbase を使用します。私は Couchbase Sync Gateway を使用して、これら 2 つのデータベース間のデータ複製を有効にしています。
ユーザーが初めてモバイル アプリにログインするときに、この特定のユーザーに関するデータ (ユーザー名に基づく) を使用してドキュメントを複製したいと考えています。Couchbase Lite (1)でフィルタリングされたレプリケーションがサポートされていることを読みましたが、どの方法を使用すればよいか非常に混乱しています。
私がやりたいことはこれに少し似ているので、フィルター関数は次のようになると思います。
function (doc, req) {
if(doc.DocType && doc.DocType == "User" && doc.IsActive && doc.Login == req.query.text)
{ return true }
else
{return false}
}
しかし、この関数をどこに作成すればよいかわかりません(私のWebアプリコードで?私は見つけましDesignDocument.create()
たが、ビュー関数のみを挿入します)。
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
私は何が欠けていますか?