Couchdb 多对多头痛

Couchdb 多对多头痛,couchdb,Couchdb,所以我读了一些关于在couchdb上转换关系的文章,但是我仍然不能找到一个合适的映射函数来表示多对多 假设您有一些文档(注意,这是一个示例,不是实际的模型): 以及定义关系的其他类型的文档: {name:"link1", link: true, from: "A", to: "B"} {name:"link2", link: true, from: "A", to: "C"} 我试图找到一个正确的函数,返回组合列表: { name: "link1", froms: ["whatever1"

所以我读了一些关于在couchdb上转换关系的文章,但是我仍然不能找到一个合适的映射函数来表示多对多

假设您有一些文档(注意,这是一个示例,不是实际的模型):

以及定义关系的其他类型的文档:

{name:"link1", link: true, from: "A", to: "B"}
{name:"link2", link: true, from: "A", to: "C"}
我试图找到一个正确的函数,返回组合列表:

{ name: "link1",
  froms: ["whatever1", "whatever2"],
  tos: ["whatever3"]
}
有人知道如何写这样一张地图吗?我应该改变我的文档结构吗?如果您只是想链接以获取指南,请不要发布。

一般来说,在库存CouchDB中,多对多是不可能的。你看起来像是一个只想要不涂糖衣的人,就是这样

连接相关数据并不是CouchDB的优势,当然它也是关系数据库的主要优势。然而,这个事实有点模糊,因为大多数人“直觉地”对他们的数据进行关联建模,因为我们都是这样训练的

您的困难恰恰是您必须向CouchDB支付获得其其他功能的成本:HTTP API、灵活的集群、多主机或脱机操作等。从设计上看,它的同步功能是可能的,因为

然而,CouchDB的另一个优势是并发性。因此,如果您已经在享受CouchDB的其他功能,并且只需要克服这一困难,您可以简单地在客户端“加入”

一个更简单的map函数只需发出所有的from(
键:[“from”,“A”],值:“whatever1”
)和tos(
键:[“to”,“B”],值:“whatever3”
)。因此,您可以使用
?key=[“from”,“A”]
查询它,并获得任何给定from或to值的所有内容的列表

对于每个链接文档,都有一个from和to值要检查。因此,可以同时查询(一次查询一个,或者同时查询,这在Javascript中非常容易):

  • 带有选项
    ?key=[“from”,“A”]
  • 还有带有
    ?键=[“to”,“B”]
  • 一旦两个结果都返回,你就有了这个链接的答案

    您会发现,由于您可能只从CouchDB发出有效的请求(索引扫描),CouchDB可以支持非常高的请求率和大量并发连接


    这容易吗?在Javascript中,这并没有那么糟糕,但不,基本上并不容易。这个问题基本上是针对CouchDB粒度和关系粒度的。(我个人对毛毛雨这样的问题感到兴奋。)

    帮助我,了解你的问题。。什么更经常?链接还是什么?不间断电源。。。同时你改变了问题…谢谢你的回答,沙发确实已经带给我很多,我愿意付出更多的努力。您描述的解决方案接近我最终实现的解决方案。但是在这里和那里阅读各种各样的博客,我真的认为我已经掌握了在一个请求/视图/列表中获取所有内容的可能性。
    { name: "link1",
      froms: ["whatever1", "whatever2"],
      tos: ["whatever3"]
    }