从mongo切换到pouchdb(使用Cloudant),我喜欢“每个用户一个数据库”的概念,但是有没有办法为每个数据库创建多个集合/表?我可以为每个数据库创建多个集合吗?
例
- Peter
- History
- Settings
- Friends
- John
- History
- Settings
- Friends
等等
感谢
从mongo切换到pouchdb(使用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你可以去添加新的设计文档,你可以直接复制并粘贴此):
{
"_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);
}
}
本质上这个映射函数说只将文档关联到此视图的类型==“朋友”。现在,我们可以查询这个视图,只有朋友将返回:
http://SERVER/DATABASE/_design/friends/_view/all
凡friends
=设计文档和视图的all
=名字命名。用您的数据库名称替换SERVER
与您的服务器和DATABASE
。
你可以在这里找到有关视图的更多信息:
https://wiki.apache.org/couchdb/Introduction_to_CouchDB_views
你可以看看relational-pouch这样的事情。否则你可以做“每个用户3个数据库”。 ;)
我可能不完全明白你在这里需要什么,但总的来说,你可以在CouchDB/Cloudant/PouchDB中以3种不同的方式实现你所描述的内容。
通常,您的数据模式决策归结为并发性。你提到PouchDB,所以你可能有一个单线程客户端,选项1很好很容易?