从mongo切换到pouchdb(使用Cloudant),我喜欢"每个用户一个数据库"概念,但有没有办法为每个数据库创建多个集合/表?
实施例
- Peter
- History
- Settings
- Friends
- John
- History
- Settings
- Friends
等...
由于
答案 0 :(得分:15)
Couchdb没有集合的概念。但是,您可以使用文档上的类型标识符以及Couchdb视图来获得类似的结果。
类型标识符
在Couchdb中保存文档时,添加指定类型的字段。例如,你会像这样存储一个朋友:
{
_id: "XXXX",
type: "Friend",
first_name: "John",
...
}
你会存储这样的历史:
{
_id: "XXXX",
type: "History",
url: "http://www.google.com",
...
}
这两个文档都在同一个数据库中,如果您查询该数据库中的所有文档,那么您将同时收到这两个文档。
<强>视图强>
您可以创建筛选类型的视图,然后直接查询这些视图。例如,创建一个视图来检索这样的朋友(在Cloudant中,您可以添加新的设计文档,并且可以直接复制和粘贴):
{
"_id" : "_design/friends",
"views" : {
"all" : {
"map" : "function(doc){ if (doc.type && doc.type == 'Friend') { emit(doc._id, doc._rev)}}"
}
}
}
让我们扩展地图功能:
function(doc) {
if (doc.type && doc.type == "Friend") {
emit(doc._id, doc._rev);
}
}
本质上,这个map函数只是说文档与这个类型为==“Friend”的视图相关联。现在,我们可以查询此视图,只返回朋友:
http://SERVER/DATABASE/_design/friends/_view/all
其中friends
=设计文档的名称,all
=视图的名称。将SERVER
替换为您的服务器,将DATABASE
替换为您的数据库名称。
您可以在此处找到有关视图的更多信息:
https://wiki.apache.org/couchdb/Introduction_to_CouchDB_views
答案 1 :(得分:3)
您可以查看relational-pouch这样的内容。另外,你可以为每个用户做3个数据库。&#34; ;)
答案 2 :(得分:0)
我可能无法完全理解您的需求,但总的来说,您可以在CouchDB / Cloudant / PouchDB中以3种不同的方式实现您所描述的内容。
通常,您的数据模式决策归结为并发。你提到PouchDB所以你可能有一个单线程客户端,而选项1很简单吗?