Join CouchDB中减少多个连接
在我的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
类型字段的文档实现):
- 球队:
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提要,然后在发生更改时更新辅助数据库中的相关文档
因此,在您的示例中,您的辅助数据库可以由每个团队的单个文档组成,其中包含该文档中的所有(或最新)匹配/粉丝/推特数据。然后,编写一个视图,从该辅助数据库中提取情感(或其他内容)