在我的CouchDB数据库中,我有以下模型(在数据库中以不同的type
字段实现的文档):
name
,id
(有很多比赛,有很多粉丝)name
,team_a
,team_b
,time
(有很多团队,有很多推文)team_id
(有很多推文)time
,sentiment
,fan_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中,你最多可以在视图函数as explained in the docs中加入1个(通过发出连接字段作为键)。
如何在CouchDB中更好地建模以允许此查询工作?我真的不想太过非规范化,但我想如果必须的话我会这样做吗?
答案 0 :(得分:0)
这有点复杂,但我用的是所谓的“三级索引”。目标是能够编写应用于另一个视图的视图。不幸的是,唯一的方法是使用视图将数据写入辅助数据库,然后使用另一个适用于该数据库的视图。这样做需要一个外部进程 - 我使用一个脚本来监听主数据库的_changes feed,然后在发生变化时更新辅助数据库中的相关文档。
因此,在您的示例中,您的辅助数据库可以包含每个团队的单个文档,其中包含该文档中的所有(或最新)匹配/粉丝/推文数据。然后编写一个视图,从该辅助数据库中提取情绪(或其他)。