【问题标题】:Couchbase query filtering by tag in an arrayCouchbase 查询按数组中的标记过滤
【发布时间】:2020-10-16 12:23:21
【问题描述】:

我有一个作者桶。在这个桶中,我保留了作者信息和作者的文章。我想从作者桶中选择有我想要的标签的文章。

我已经尝试过了,但我找不到如何进行过滤。

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"
      ],
      "claps": [],
      "comments": [],
      "content": {
        "articleType": "HTML",
        "data": "My First Article"
      },
      "id": "81d6fa22-63be-4a93-8e86-8d569080da97",
      "publishStatus": "UNLISTED",
      "statistic": {
        "views": [
          1602683127039,
          1602683148270
        ]
      },
      "tags": [
        "Art"
      ],
      "title": "Culture"
    }
  ],
  "id": "8c7ba33e-0674-4d99-bfad-29d144028bc9",
}

【问题讨论】:

    标签: sql couchbase n1ql


    【解决方案1】:

    尝试使用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"],这样就可以了。

    但是,如果您使用逗号分隔的字符串,您也可以使用 SPLITARRAY_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;
    

    【讨论】:

    • 感谢您的回复。这正是我正在寻找的查询。
    猜你喜欢
    • 1970-01-01
    • 2014-03-12
    • 1970-01-01
    • 1970-01-01
    • 2018-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-28
    相关资源
    最近更新 更多