我有一个对象,它有一个名为
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
我最终使用
lower()
函数将 value
和参数 ($tag
) 转换为小写字母。
*[_type == 'articles' &&
length(tags[lower(@.value) == lower($tag)]) > 0 &&
!(_id in path("drafts.**"))
] {
...
}