我想用username属性提取文档 作为user1的user1,就像每个user only only属性的名称一样。
这是我的复制码。
private void setupreplication(){
Console.WriteLine ("Setting up replication");
Uri Server = new Uri("http://192.168.1.213:4984/aussie-coins-syncgw/");
var pull = _db.CreatePullReplication (Server);
var push = _db.CreatePushReplication (Server);
pull.Filter = "byUser";
pull.FilterParams = new Dictionary<string, object> { {"type", "user1"} };
pull.Continuous = true;
push.Continuous = true;
pull.Start();
push.Start();
}
这是我的设置过滤器代码
_couchBaseLiteLocal.SetFilter("byUser", (revision, filterParams) =>
{
var typeParam = filterParams["type"].ToString();
return (typeParam != null) && typeParam.Equals("user1");
});
使用上面的代码,通用拉自身不起作用。 我只是尝试按照文档中的说明进行操作。
我不明白setfilter函数如何从服务器过滤数据。如果有人帮助理解setfilter如何工作并使上述代码工作
,那就太好了提前致谢。
答案 0 :(得分:0)
拉式复制中的过滤器功能确实可以返回您感兴趣的特定文档。但它效率不高,过滤器函数将在远程数据库上的所有文档上运行,以确定要拉出哪些文档,每次启动拉动复制时。
相反,Sync Gateway引入了sync function的概念,该概念以递增方式路由和计算文档的访问控制规则。这样,当启动pull复制时,Sync Gateway可以快速,直接地返回用户有权访问的特定文档。
如果需要,您可以在同步网关的拉取复制中specify individual channels。但要记住的是,Sync Gateway和Couchbase Lite之间的过滤拉取复制不是基于过滤器功能。如果需要,它基于同步功能和基于通道的过滤。
在P2P场景中(两个Couchbase Lite实例之间的复制),使用了filter function model。