从Mongo切换到PouchDB(与Cloudant一起使用),我喜欢“每个用户一个数据库”的概念,但是否有办法在一个数据库中创建多个集合/表?
示例
- Peter
- History
- Settings
- Friends
- John
- History
- Settings
- Friends
etc...
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)}}"
}
}
}
让我们拓展map函数:
function(doc) {
if (doc.type && doc.type == "Friend") {
emit(doc._id, doc._rev);
}
}
本质上,这个映射函数的意思是只将类型为“Friend”的文档与此视图关联。现在,我们可以查询此视图并仅返回朋友:
http://SERVER/DATABASE/_design/friends/_view/all
其中friends
是设计文档的名称,all
是视图的名称。请将SERVER
替换为您的服务器名称,将DATABASE
替换为您的数据库名称。
您可以在此处找到有关视图更多信息:
https://wiki.apache.org/couchdb/Introduction_to_CouchDB_views
我可能不完全理解你在这里需要什么,但通常在CouchDB / Cloudant / PouchDB中,您可以通过3种不同的方式实现您所描述的内容。
_id
字段中加入前缀,如 "users:4711" 的想法如何?这样一来,您就可以创建类似仓库的查询,例如findUserById(userId)
。 - Serbroda