【问题标题】:Couchdb / Pouchdb Relation between multiple users and multiple documentsCouchdb / Pouchdb 多个用户和多个文档之间的关系
【发布时间】:2016-04-03 05:43:56
【问题描述】:

我这里有个问题: 我正在使用 ionic frmaework 构建一个需要能够离线工作的移动应用程序。

我想采用 CouchDB / PouchDB 解决方案。但要做到这一点,我需要知道如何将我的数据放入 noSQl 数据库(之前的 MySQL 用户......)。所以,nosql 对我来说是新的,但似乎很有趣。

所以我的应用程序有一个连接部分,即一个用户数据库。每个用户都有附在他身上的文件。但是许多用户可以拥有许多文档(共享文档)。我想复制一位用户的数据(所以他的信息+他在移动应用上的文档)。

我的想法是这样的:

每个数据库一个。一个用于所有文档的数据库,具有服务器过滤功能,仅发送属于用户的文档。

而在客户端,我只需要打电话:

var localDB = new PouchDB("myuser");
var remoteDB = new PouchDB("http://128.199.48.178:5984/myuser");
  localDB.sync(remoteDB, {
    live: true
  });

在客户端我也会有类似的东西:

{
    username: "myuser",
    birthday : "Date",
    documents : [{
        "_id": "2",
        "szObject": "My Document",
    },
    {
        "_id": "85",
        "szObject": "My Document",
    }]
}

您认为使用 Couchdb 和 pouchdb 可以实现类似的操作吗?如果可以,我的想法是否正确? 我读到每个文档有一个数据库不是问题,但我不知道复制是否会像我想象的那样工作

【问题讨论】:

    标签: javascript database database-design couchdb pouchdb


    【解决方案1】:

    Plain CouchDB 没有任何文档访问选项,但这些可能是您的解决方案:

    A.创建一个视图,然后将 Pouch-To-Couch 与过滤器同步。但是,尽管这只会同步用户应该看到的文档,但任何有足够知识的人都可以更改代码并查看其他人的文档,或者实际上只是对数据库进行任何操作(可能不是您要查找的内容)。

    B.创建一个包含所有文档的主数据库,然后为每个用户创建一个数据库,以及主数据库和每个用户数据库之间的过滤复制。可能是处理这个问题的最简单和最合适的方法。

    C.不幸的是,没有 validate_doc_read(因为有 validate_doc_update),但也许您可以制作一个简单的 HTTP 代理,它会解析传入的 JSON,检查特定用户是否可以查看它,如果没有,则抛出 403 Forbidden。好吧,您还必须捕获使用 include_docs=true 查询的任何视图。

    (迟到的回复,我希望它仍然有用 - 或者如果没有,您找到了解决问题的好方法)

    【讨论】:

    • 感谢您的回答,我认为您对 B 解决方案是正确的,我将尝试下一个弱项
    • 您是如何实现答案 B 的?您是否将主数据库与所有用户数据库同步?你的循环是通过每个用户数据库等吗?
    猜你喜欢
    • 2017-02-24
    • 2015-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多