Join CouchDB中减少多个连接

Join CouchDB中减少多个连接,join,couchdb,Join,Couchdb,在我的CouchDB数据库中,我有以下模型(作为数据库中具有不同类型字段的文档实现): 球队:name,id(有很多比赛,有很多球迷) 匹配:名称,团队a,团队b,时间(有很多团队,有很多推特) 粉丝:team\u id(有很多tweet) 推特:时间,情绪,粉丝id 我想平均每个团队的推特情绪。如果我使用SQL,我会这样做: SELECT avg(sentiment) FROM team JOIN match on team.id = match.team_a OR team.id

在我的CouchDB数据库中,我有以下模型(作为数据库中具有不同
类型
字段的文档实现):

  • 球队:
    name
    id
    (有很多比赛,有很多球迷)
  • 匹配:
    名称
    团队a
    团队b
    时间
    (有很多团队,有很多推特)
  • 粉丝:
    team\u id
    (有很多tweet)
  • 推特:
    时间
    情绪
    粉丝id
我想平均每个团队的推特情绪。如果我使用SQL,我会这样做:

SELECT avg(sentiment)
FROM team
    JOIN match on team.id = match.team_a OR team.id = match.team_b
    JOIN fan on fan.team = team.id
    JOIN tweet on (tweet.time BETWEEN match.time AND match.time + interval '1 hour') AND tweet.user = fan.id
GROUP BY team.id
但是,在CouchDB中,您最多可以在视图函数中执行1个联接(通过将联接字段作为键发出)


如何在CouchDB中更好地建模以允许此查询工作?我真的不想去规范化太多,但如果必须的话,我想我会去规范化的。

这有点复杂,但我使用了我称之为“三级索引”的方法。目标是能够编写应用于另一个视图的视图。不幸的是,实现这一点的唯一方法是使用视图将数据写入辅助数据库,然后使用另一个在该数据库上工作的视图。这样做需要一个外部进程——我使用一个脚本来侦听主数据库的_changes提要,然后在发生更改时更新辅助数据库中的相关文档

因此,在您的示例中,您的辅助数据库可以由每个团队的单个文档组成,其中包含该文档中的所有(或最新)匹配/粉丝/推特数据。然后,编写一个视图,从该辅助数据库中提取情感(或其他内容)