sql - 每个特定类型文档的 N1QL 查询计数
问题描述
我是沙发库和非关系数据库的新手。
我有一个包含球员和球队的桶(2 种文件)。每个玩家都有类型,playedFor(一个包含他参加过的所有球队的数组)和一个名字,例如:
{
"type":"player"
"name":"player1"
"playedFor": [
"England/Manchester/United"
"England/Manchester/City"
]
}
每个团队都有类型、名称和类别,例如:
{
"type": "team"
"name": "England/Manchester/City"
"category": "FC"
}
我想知道每个 FC 类别的球队有多少球员出场。我做了这个查询来计算特定团队:
SELECT COUNT(1) AS total
FROM bucket AS a
WHERE a.type='player'
AND (any r in a.playedFor satisfies r in ["England/Manchester/United"] end)
但我怎样才能对所有团队进行此查询?
解决方案
您对这些数据建模的方式的问题是球员可以为 1 支或多支球队效力(因此是数组)。
解决此问题的一种方法是使用 Couchbase 的UNNEST 子句来“展平”这些数组(它基本上是将文档连接到数组中的每个项目)。
到那时,它变得像标准一样容易GROUP BY
。这是一个例子:
SELECT team, count(1) AS totalPlayers
FROM `bucket` AS a
UNNEST a.playedFor team
WHERE a.type='player'
GROUP BY team
此查询将生成如下输出:
[
{
"team": "Pittsburgh/Pirates",
"totalPlayers": 8
},
{
"team": "England/Manchester/United",
"totalPlayers": 10
},
{
"team": "England/Manchester/City",
"totalPlayers": 15
},
{
"team": "Cincinnati/Reds",
"totalPlayers": 21
}
]
(抱歉,我使用 MLB 球队来增加你的样本,因为我对足球队了解不多)。
请注意,单独的团队文档不会包含在此查询中,但JOIN
如果您需要来自他们的信息以进行查询,您也可以使用它们。
推荐阅读
- python-3.x - Pytorch:在 GPU 上执行:RuntimeError:后端 CUDA 的预期对象,但为参数 #3 'index' 获得了后端 CPU
- html - 如何使用 swift 在 WKWebView 中预填充网站上的文本框
- c# - 找不到嵌入在项目 DLL 中的 .XSL 文件
- ios - 新的空 iOS 应用程序有几十个内存泄漏
- flutter - 列表中的控制台打印值详细信息
- unity3d - HoloLens:如何在远距离稳定全息图
- angular - 订阅 Observable 并获取特定类型的事件
- elasticsearch - 具有多个术语查询的 Elasticsearch nester_filter
- jpa - 是否有可能检查一个实体的多个列是否包含 JPA 中的一个搜索键
- python - cython中不同字符串的相同内存地址