我目前正在与NodeJS& amp; socket.io。 我需要一些帮助来将一些关系数据库结构转换为NoSQL。我对NoSQL世界非常陌生,这就是我在这里提出这个问题的原因。
我的目标是存储用户及其注册的房间,以便列出特定房间内的所有用户。
在SQL中我会做这样的事情:
--Users
John
Jack
James
--Room
Javascript
PHP
CSS
--Relation
Jack | PHP
Jack | CSS
John | PHP
James | Javascript
然后select user from relation where room like 'PHP'
如何使用couchDB实际执行此操作? 我需要存储,列出和删除。 用户也是独一无二的,但用户可以在多个房间。 当用户断开连接时,应该将其移除。 如果用户离开了房间,他应该从那个房间搬走。 如何选择房间内的所有用户" PHP"?
答案 0 :(得分:0)
我认为您不应该将信息保存在数据库中。房间应该是内存中包含一组用户ID的密钥。当用户进入房间时,将项目推送到阵列并在他离开时弹出。仍然要说明一些概念,你可以用couchdb做什么
像这样创建文档
{
"user" : "scope77",
"room" : "php"
}
现在,既然你想让所有用户都在他们所在的房间里创建一个视图,按照房间对用户进行索引
function(doc){
if(doc.room)
emit(doc.room,doc)
}
现在,对此视图的调用将返回特定房间中的用户列表。
curl http://localhost:5984/db_name/design_name/view_name?key="php"
就是这样。这里要记住的一件事是,在关系模型中,您可能会为房间和用户创建单独的表,并引用它们以使数据规范化。在沙发数据库中虽然您可以链接文档,但通常更容易,甚至更喜欢使用重复和非规范化数据。
因此即使您可以为房间创建单独的文档,最好将房间名称与用户文档一起存储。