Couchbase 同步网关“;渠道;在数据库中
Pocket DB中是否支持Couchbase Sync Gateway的“通道”? 我希望用户能够看到整个数据的一个子集,如果他们创建了新数据,就能够与谁共享数据Couchbase 同步网关“;渠道;在数据库中,couchbase,pouchdb,couchbase-sync-gateway,Couchbase,Pouchdb,Couchbase Sync Gateway,Pocket DB中是否支持Couchbase Sync Gateway的“通道”? 我希望用户能够看到整个数据的一个子集,如果他们创建了新数据,就能够与谁共享数据 这有可能吗?或者我必须直接与服务器交互,还是在移动设备上使用couchbase lite?PouchDB是以CouchDB为模型的,它没有通道的概念,因此没有计划在PouchDB中实现它 然而,解决问题的一个简单方法是将PockDB同步到CouchDB,然后将其同步到Couchbase同步网关。您需要CouchDB作为中介的原因是,
这有可能吗?或者我必须直接与服务器交互,还是在移动设备上使用couchbase lite?PouchDB是以CouchDB为模型的,它没有通道的概念,因此没有计划在PouchDB中实现它
然而,解决问题的一个简单方法是将PockDB同步到CouchDB,然后将其同步到Couchbase同步网关。您需要CouchDB作为中介的原因是,直接PockDB Couchbase同步网关同步存在一些问题,尽管希望这些问题能够很快得到解决(请参见和)。只需一点更新:现在这是可能的,PockDB(自V3.4.0版起)现在与同步网关兼容
请参阅此处的教程:以下是使Pocket db客户端通过用户通道与Couchbase Sync Gateway一起工作的解决方案:
var sync = function () {
var opts = {
live: true,
retry: true,
//-- from here
filter: "sync_gateway/bychannel",
query_params: {
"channels": channels
}
//-- to here
};
database.sync(syncServer, opts);
}
这里的关键是,您只需按原样传递筛选器和查询参数,同步网关就能够理解此筛选器。
下面是一个使用通道的具体示例
var db = new PouchDB("yep");
db.sync(new PouchDB("http://localhost:4984/beer-sample/"), {
live: true,
retry: true,
filter: "sync_gateway/bychannel",
query_params: {
channels: "channel-1,channel-2,channel-3,bar"
}
})
过滤器:“同步网关/副通道”
传递要应用于源文档的筛选器的名称,当前唯一支持的筛选器是“sync_gateway/bychannel”,这将仅从一组命名的通道复制文档
var db = new PouchDB("yep");
db.sync(new PouchDB("http://localhost:4984/beer-sample/"), {
live: true,
retry: true,
filter: "sync_gateway/bychannel",
query_params: {
channels: "channel-1,channel-2,channel-3,bar"
}
})
查询参数s.channels
我们用逗号将它们分开,而不是传递数组
同步功能示例
在同步网关中,您的同步功能可能如下所示(我的目的是尽可能保持同步功能的愚蠢性,以便您一眼就能了解我们如何在PockDB中使用上述通道):
6年太晚了。。。但迟做总比不做好 如果用户上的频道发生变化怎么办?@Jedi:它将具有与Couchbase Lite相同的行为,其中本地数据库将开始获取分配给新频道的数据,但问题是,您仍将拥有以前不需要的同步文档。因此,为了保持它干净整洁,我们要做的是清理本地数据库&resync,它将只获取新通道数据。@MaqboolAhmed,@jedi here channels query_params中键“channels”的值是一个字符串或字符串数组?@K Pal:array ofstrings@StCleezy你说得对。但是,字符串数组在转换为查询字符串中以逗号分隔的列表时也应起作用。我个人更喜欢数组,因为它是表示多个字符串的更好方法。