0

我想为 user1 提取用户名属性为 user1 的文档,就像每个用户的名称一样。

这是我的复制代码。

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

使用上面的代码,通用 pull 本身不起作用。我只是尝试按照文档中的说明进行操作。

我不明白 setfilter 函数如何从服务器过滤数据。如果有人帮助理解 setfilter 的工作原理并使上述代码正常工作,那就太好了

提前致谢。

4

1 回答 1

0

拉复制中的过滤功能确实可以返回您感兴趣的特定文档。但是效率不高,过滤功能会在远程数据库上的所有文档上运行,以确定拉哪些文件,每次拉复制开始.

相反,Sync Gateway 引入了同步功能的概念,该功能以增量方式路由和计算文档的访问控制规则。这样,当启动拉复制时,Sync Gateway 可以快速而直接地返回用户有权访问的特定文档。

如果需要,您可以在 Sync Gateway 的拉取复制中指定单个通道。但要记住的是,Sync Gateway 和 Couchbase Lite 之间的过滤拉取复制不是基于过滤器函数。如果需要,它基于同步功能和基于通道的过滤。

在 P2P 场景(两个 Couchbase Lite 实例之间的复制)中,使用了过滤器函数模型

于 2015-05-22T10:34:42.570 回答