首页 文章

Couchdb / Pouchdb多个用户和多个文档之间的关系

提问于
浏览
1

我在这里遇到了一个问题:我正在 Build 一个离线frmaework的移动应用程序,他需要能够脱机工作 .

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

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

我的想法是这样的:

每个数据库一个 . 所有Document的一个数据库,其中服务器过滤仅发送属于该用户的文档 .

在客户端,我必须打电话给:

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可以做到这样吗?如果是的话,我是否正确地思考它?我读到每个文档有一个数据库不是问题,但我不知道复制是否会像我想象的那样工作

1 回答

  • 2

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

    A.创建一个视图,然后使用过滤器同步Pouch-To-Couch . 但是,虽然这只会同步用户应该看到的文档,但是任何有足够知识的人都可以改变代码并查看其他人的文档,或者只是对数据库做任何事情(可能不是你想要的) .

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

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

    (迟到的回复,我希望它仍然有用 - 或者如果没有,你找到了一个很好的解决方案)

相关问题