在阅读了关于EntityRelationship的CouchDB wiki之后,我确定设置关系文档可能是最好的解决方案。
{
"_id": "2600emu",
"type": "game"
}
{
"_id": 123,
"title": "Emulators",
"user_id": "dstaley",
"type": "list"
}
{
"_id": "98765456789876543",
"type": "relationship",
"list_id": 123,
"game_id": "2600emu"
}
但是,据我所知,这不允许我在一个请求中获得列表的元数据和游戏的元数据。有什么建议吗?
很好的问题。您确定了使用“规范化”数据模型(带有链接的不同文档类型)是最佳模型的几个非常重要的原因:
这里的解决方案是“地图端连接”(借用hadoop社区的说法),这也是对的。基本上,您希望使用映射输出中的不同行来表示不同的信息片段。然后,您可以使用范围查询(startkey/endkey)来查询所需的映射结果部分,以及“join”表的物化视图。然而,您在文档中没有发现的一个难题是:
以便视图行的排序如下:
["list_1"], null
["list_1", "game"], {"_id":"game_1234"}
["list_1", "game"], {"_id":"game_5678"}
["list_2"], null
["list_2","game"], {"_id":"game1234"}
["list_3"], null
...
将它与现有的数据模型放在一起,下面是一些(未经测试的)伪代码,应该可以实现这一目的:
function(doc) {
if (doc.type=="list") {
//this is the one in the one-to-many
emit( [doc._id]),);
}
else if (doc.type=="relationship") {
//this is the many in the one-to-many
//doc.list_id is our foreign key to the list. We use that as the key
//doc.game_id is the foreign key to the game. We use that as the value
emit( [doc.list_id,'game'], {'_id': doc.game_id});
}
}
最后,您可以使用startkey/endkey对其进行查询,以便获得所有您感兴趣的以list_id开头的行。它看起来像:
curl -g 'https://usr:pwd@usr.cloudant.com/db/_design/design_doc_name/_view/view_name?startkey=["123"]&endkey=["123",{}]&include_docs=true'
主要内容:在CouchDB数据库中使用Fauxton创建文档,CouchDB使用cURL实用程序创建文档在CouchDB中,数据库的数据以文档的形式而不是表格存储。 在CouchDB数据库中使用Fauxton创建文档 要在CouchDB数据库中创建文档,请打开Fauxton url: 选择特定的数据库,假设在数据库:上创建文档,先点击数据库链接进入数据概览。 点击新文档(New Document),如下图所示: 然后就会打开一个页面,默认只有一个字段:,但是可以通点击”Add Field“来新增
主要内容:CouchDB使用Fauxton删除文档,2. CouchDB使用cURL工具删除文档在本篇文章中,我们来学习如何删除 CouchDB 数据库中的文档。删除 CouchDB 数据库中的文档有两种方法,下面分别来看看如何操作。 CouchDB使用Fauxton删除文档 打开Fauxton url: 首先选择包含所有文档的数据库。这里是数据库“”中的所有三个文件: 选择要删除的文档,假设要删除ID为的文档,那么就点击ID为的这个文档进入详细信息,如下所示 - 在ID为的这个文档进入详细
主要内容:1. 使用fauxton更新(编辑)文档,2. CouchDB使用cURL工具更新文档在本篇文章中,我们来学习如何编辑/修改 CouchDB 数据库中的文档。编辑/修改 CouchDB 数据库中的文档有两种方法,下面分别来看看如何操作。 1. 使用fauxton更新(编辑)文档 打开Fauxton url:http://127.0.0.1:5984/_utils 在创建文档后,还可以更新/更改/编辑文档。首先打数据库概览,里边有文档列表,如下表所示 - 点击想要修改的文档,例如点击
我有3个模型:用户、宠物和诊所。 让我们假设表格:用户、宠物和诊所。关系是,一个用户可以有多个宠物,而一个宠物只有一个诊所。 在“Pets”表中,我有一个FK到用户id,另一个FK到诊所id。 我想做一些类似的事情: 在用户模型上,返回与用户关联的所有不同诊所。现在我只能做: 但我只想返回不同的诊所。 用户模态: 宠物模式: 有什么建议吗?
模型(Model)之间存在各种各样的关系,如:一对一(One-To-One )、一对多(One-To-Many)等。模型间的关系本质上是对其代表的数据库中表之间的关系描述,通过这些关系可以实现数据库中表之间主/外键约束的创建。查询时也可以基于这些关系,生成在数据库中执行的连接查询或复合查询SQL语句。 关系/关联的使用 1.1 一对一(One-To-One)关联 1.2 一对多(One-To-Ma
我是MongoDB的新手,我正在创建一个数据库来记录学生和学生在大学学习的课程。有三个集合,称为学生,科目和讲师。学生集合包含studentId、姓名、dob、email、Year。主题集合包含subjectId、subjectName、credits;讲师集合包含lecturerId、lectureName、speciliazation、contactNo、email。学生和学生收藏之间的关系是