首页 > 解决方案 > 减少 CouchDB 中的多个连接

问题描述

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

我想平均每个团队的推文情绪。如果我使用 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 中更好地建模以允许该查询工作?我真的不想过多地去规范化,但我想如果必须的话我会的?

标签: joincouchdb

解决方案


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

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


推荐阅读