问题描述
我有一个作者桶。在这个存储桶中,我保留了作者信息和作者的文章。我想从作者存储桶中选择具有所需标签的文章。
我已经尝试过了,但是找不到过滤方法。
SELECT art.* FROM author AS a
UNnesT a.articles AS art
WHERE art.tags = 'History'
这是作者存储桶:
{
"about": {
"name": "sassa","userName": "sassatur"
},"articles": [
{
"authorId": [
"8c7ba33e-0674-4d99-bfad-29d144028bc9"
],"claps": [],"comments": [],"content": {
"articleType": "HTML","data": "My First Article"
},"id": "71d6fa22-61be-4a93-8e86-8d569080da97","publishStatus": "UNLISTED","statistic": {
"articleId": "71d6fa22-61be-4a93-8e86-8d569080da97","views": [
1602683127039,1602683148270
]
},"tags": [
"Art,History"
],"title": "Culture"
},{
"authorId": [
"8c7ba33e-0674-4d99-bfad-29d144028bc9"
],"id": "81d6fa22-63be-4a93-8e86-8d569080da97","statistic": {
"views": [
1602683127039,"tags": [
"Art"
],"title": "Culture"
}
],"id": "8c7ba33e-0674-4d99-bfad-29d144028bc9",}
解决方法
尝试使用ANY/IN/SATISFIES
,如下所示:
SELECT art.* FROM author AS a
UNNEST a.articles AS art
WHERE ANY x IN art.tags SATISFIES x == 'Art' END;
这在您的示例中适用于“艺术”,但不适用于“历史记录”,因为您存储标签的方式不同。它是一个数组,但似乎有一个带有逗号分隔值的单(?)项。因此,我建议使用"tags": ["Art,History"]
代替"tags": ["Art","History"]
,然后它将起作用。
但是,如果您使用逗号分隔的字符串,则可以同时使用SPLIT
和ARRAY_CONTAINS
:
SELECT art.* FROM author AS a
UNNEST a.articles AS art
WHERE ANY x IN art.tags SATISFIES ARRAY_CONTAINS(SPLIT(x,","),'History') END;