检查 groq 查询中对象数组是否包含不区分大小写的字符串

问题描述 投票:0回答:1

我有一个对象,它有一个名为

tags
的字段。它是一个对象数组。

我需要查询那些其

tags
包含case insensitive字符串的文档。

[
  {
    "_createdAt": "2022-02-18T09:16:27Z",
    "_id": "article-13000018493",
    "_rev": "LRHtyYM9ePAzIgMqDbhEWY",
    "_type": "article",
    "_updatedAt": "2022-02-23T14:29:00Z",
    "slug": {
      "current": "learn-to-kode"
    },
    "tags": [
      {
        "value": "Java"
      },
      {
        "value": "Python"
      },
      {
        "value": "JS and ts"
      },
      {
        "value": "React"
      }
    ],
    "tittel": "Learn to code"
  },
  {
    "_createdAt": "2022-02-18T09:16:27Z",
    "_id": "article-352398563",
    "_rev": "LRHtyYM9ePAzIgMqDbhEWY",
    "_type": "article",
    "_updatedAt": "2022-02-23T14:29:00Z",
    "slug": {
      "current": "learn-to-kode-js"
    },
    "tags": [
      {
        "value": "React"
      },
      {
        "value": "Next.js"
      },
      {
        "value": "js and TS"
      },
      {
        "value": "Vue"
      }
    ],
    "tittel": "Learn to code JS"
  }
]

我使用了这个查询。

*[_type == 'articles' &&  'js and TS' in tags[].value] {
  ...,
  tags[] { value }
}

它仅返回最后一个文档,因为第一个文档的标签包含

JS and ts
,而不是
js and TS

这是我在 groq.dev 上的查询。 https://groq.dev/P6RknxgQtDXJPG8UFJ6WyS

database content-management-system sanity groq
1个回答
1
投票

我最终使用

lower()
函数将
value
和参数 (
$tag
) 转换为小写字母。

*[_type == 'articles' &&  
  length(tags[lower(@.value) == lower($tag)]) > 0 &&
  !(_id in path("drafts.**"))
 ] {
      ...
 }
© www.soinside.com 2019 - 2024. All rights reserved.