我能为每个数据库创建多个集合吗?

Abe*_*ier 11 couchdb cloudant pouchdb

从蒙戈切换到pouchdb(与Cloudant),我喜欢"每个用户一个数据库"的概念,但有一个方法来创建每个数据库的多个集合/表?

- Peter  
        - History
        - Settings
        - Friends
- John
        - History
        - Settings
        - Friends
Run Code Online (Sandbox Code Playgroud)

等等...

谢谢

mar*_*atx 16

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

类型标识符

在Couchdb中保存文档时,添加指定类型的字段.例如,你会像这样存储一个朋友:

{
  _id: "XXXX",
  type: "Friend",
  first_name: "John",
  ...
}
Run Code Online (Sandbox Code Playgroud)

你会存储这样的历史记录:

{
  _id: "XXXX",
  type: "History",
  url: "http://www.google.com",
  ...
}
Run Code Online (Sandbox Code Playgroud)

这两个文档都在同一个数据库中,如果您查询该数据库上的所有文档,那么您将同时收到这两个文档.

查看

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

{
  "_id" : "_design/friends",
  "views" : {
    "all" : {
      "map" : "function(doc){ if (doc.type && doc.type == 'Friend') { emit(doc._id, doc._rev)}}"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

让我们扩展地图功能:

function(doc) {
  if (doc.type && doc.type == "Friend") {
    emit(doc._id, doc._rev);
  }
}
Run Code Online (Sandbox Code Playgroud)

本质上,这个map函数只是说文档与这个类型为=="Friend"的视图相关联.现在,我们可以查询此视图,只返回朋友:

http://SERVER/DATABASE/_design/friends/_view/all
Run Code Online (Sandbox Code Playgroud)

其中friends=设计文档的all名称和=视图的名称.替换SERVER为您的服务器和DATABASE您的数据库名称.

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

https://wiki.apache.org/couchdb/Introduction_to_CouchDB_views


nla*_*son 5

你可以查看relational-pouch来寻找类似的东西。否则,您可以执行“每个用户 3 个数据库”。;)