减少CouchDB中的多个连接

时间:2018-05-07 02:56:29

标签: join couchdb

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

  • 团队:nameid(有很多比赛,有很多粉丝)
  • 匹配:nameteam_ateam_btime(有很多团队,有很多推文)
  • 粉丝:team_id(有很多推文)
  • 推文:timesentimentfan_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中更好地建模以允许此查询工作?我真的不想太过非规范化,但我想如果必须的话我会这样做吗?

1 个答案:

答案 0 :(得分:0)

这有点复杂,但我用的是所谓的“三级索引”。目标是能够编写应用于另一个视图的视图。不幸的是,唯一的方法是使用视图将数据写入辅助数据库,然后使用另一个适用于该数据库的视图。这样做需要一个外部进程 - 我使用一个脚本来监听主数据库的_changes feed,然后在发生变化时更新辅助数据库中的相关文档。

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