Couchdb 我可以为每个数据库创建多个集合吗?

Couchdb 我可以为每个数据库创建多个集合吗?,couchdb,pouchdb,cloudant,Couchdb,Pouchdb,Cloudant,从mongo切换到PockDB(使用Cloudant),我喜欢“每个用户一个数据库”的概念,但是有没有办法为每个数据库创建多个集合/表 范例 - Peter - History - Settings - Friends - John - History - Settings - Friends 等等。Couchdb没有集合的概念。但是,使用文档上的类型标识符和Couchdb视图可以获得类似的结果

从mongo切换到PockDB(使用Cloudant),我喜欢“每个用户一个数据库”的概念,但是有没有办法为每个数据库创建多个集合/表

范例

- Peter  
        - History
        - Settings
        - Friends
- John
        - History
        - Settings
        - Friends

等等。

Couchdb没有集合的概念。但是,使用文档上的类型标识符和Couchdb视图可以获得类似的结果

类型标识符

在Couchdb中保存文档时,请添加指定类型的字段。例如,您可以这样存储朋友:

{
  _id: "XXXX",
  type: "Friend",
  first_name: "John",
  ...
}
您可以这样存储历史记录:

{
  _id: "XXXX",
  type: "History",
  url: "http://www.google.com",
  ...
}
这两个文档都在同一个数据库中,如果查询该数据库中的所有文档,则会同时收到这两个文档

视图

您可以创建按类型过滤的视图,然后直接查询这些视图。例如,创建一个视图来检索这样的朋友(在Cloudant中,您可以添加新的设计文档,并可以直接复制和粘贴此文档):

让我们展开map函数:

function(doc) {
  if (doc.type && doc.type == "Friend") {
    emit(doc._id, doc._rev);
  }
}
本质上,这个映射函数是说,只将类型为==“Friend”的文档关联到此视图。现在,我们可以查询此视图,只返回朋友:

http://SERVER/DATABASE/_design/friends/_view/all
其中,
friends
=设计文档的名称,
all
=视图的名称。将
服务器
替换为您的服务器,将
数据库
替换为您的数据库名称

您可以在此处找到有关视图的更多信息:


你可以研究类似的东西。否则,您可以执行“每个用户3个数据库”。;)

我可能不完全理解您在这里需要什么,但一般来说,您可以在CouchDB/Cloudant/pockdb中以3种不同的方式实现您所描述的内容

  • 每人一份文件(彼得、约翰)。当然-如果集合不是很大,更重要的是,如果不同的用户没有同时更新它们(或者在不同的数据库实例中更糟),导致冲突,那么在JSON中,每个集合只有一个元素,包含一个数组,您只需一个文档就可以处理所有内容。让访问变得轻而易举
  • 每个集合有一个文档(Peter历史记录、Peter设置等)。类似的约束,但您可以创建一个文档来保存每个集合。如果不经常同时修改它们,那么您将有一个用于Peter的历史记录的文档,另一个用于Peter的设置
  • 每个项目一份文件。这是最精细的方法-许多小的简单文档,每个文档包含一个元素(比如Peter的一个历史条目)。代码变得稍微简单了一些,因为删除项变成了删除,许多客户端可以同时更新项,但现在您依赖于视图将所有项放入列表中。例如,带有键[person、listName、item]的视图将允许您访问所需内容
  • 通常,您的数据模式决策归结为并发性。您提到PockDB,可能是因为您有一个单线程客户端,而选项1又好又简单

    http://SERVER/DATABASE/_design/friends/_view/all