我有一个管理用户的pouchdb应用程序.
用户拥有一个本地pouchDB实例,可以使用单个couchDB数据库进行复制.很简单.
这是事情变得有点复杂的地方.我在我的设计中引入了"群体"的概念.组将是不同的couchDB数据库,但在本地,它们应该是用户数据库的一部分.
我在pouchDB网站上阅读了一些关于"花哨复制"的内容,这似乎是我追求的解决方案.
现在,我的问题是,我该怎么做?更具体地说,如何从多个远程数据库复制到一个本地数据库?一些代码示例将是超级的.
从下面的图表中,您将注意到我需要根据用户所在的组动态添加数据库.对我的设计的批评也将受到赞赏. 谢谢!
流量应该是这样的:
localUserDB
var groupDB = new PouchDB('remote-group-url');
groupDB.replicate.to(localUserDB);
localUserDB.replicate.to(groupDB)
我是否需要过滤复制?)编辑:诺兰建议我调查couchDB"角色"系统来解决我的问题.一旦我搞清楚,我会在这里发布.
nla*_*son 11
从许多远程数据库复制到本地数据库:
remoteDB1.replicate.to(localDB);
remoteDB2.replicate.to(localDB);
remoteDB3.replicate.to(localDB);
// etc.
Run Code Online (Sandbox Code Playgroud)
然后从本地数据库到应该接收更改的远程数据库进行过滤复制:
localDB.replicate.to(remoteDB1, {
filter: function (doc) {
return doc.shouldBeReplicated;
}
});
Run Code Online (Sandbox Code Playgroud)
为何过滤复制?因为您的本地数据库包含来自许多源的文档,并且您不希望将所有内容复制回一个远程数据库.
为什么过滤功能?由于您是从本地数据库复制的,因此使用设计文档,视图等无法获得性能提升.只需传入过滤函数即可; 它更简单.:)
希望有所帮助!
编辑:好吧,这听起来像用户所属的组的名称实际上包含在第一个数据库中,这就是"迭代"的意思.不,你可能不应该这样做.:)您正试图绕过CouchDB的内置身份验证/权限系统.
相反,您应该使用CouchDB的内置角色,将这些角色应用于用户,然后使用"每个角色的数据库"方案来确保用户只能访问其正确的组DB.用户始终可以查询_users
API以查看它们属于哪些角色.简单!
有关更多详细信息,请阅读pouchdb-authentication README.