GraphQL按嵌套Tag对象多值过滤:如何获取含invoice和open双标签的文档?
基于嵌套Tag对象过滤GraphQL查询,获取同时包含多个指定标签的文档
我有一个GraphQL API,文档的数据结构如下(包含嵌套的Tag数组):
{ "name": "...", "tags": [ { "name": "..." }, { "name": "..." } // 更多标签 ] }
我需要查询同时包含名称为"invoice"和"open"这两个Tag的所有文档,但尝试了以下查询后无法得到预期结果:
query { documents ( where: { tags: { some: { name: { and: { in: [ "invoice", "open" ] } } } } } ) { nodes { name tags { name } } } }
正确的查询写法
要实现同时匹配多个标签的需求,需要用AND逻辑组合两个独立的tags.some条件,确保文档同时存在指定的两个标签:
query { documents( where: { AND: [ { tags: { some: { name: "invoice" } } }, { tags: { some: { name: "open" } } } ] } ) { nodes { name tags { name } } } }
原查询失效的原因
你之前的写法逻辑有误:
in: ["invoice", "open"]仅匹配单个Tag的name属于该数组,无法实现“同时包含两个标签”的逻辑- 把
and和in结合使用没有意义,单个Tag的name不可能同时等于两个不同的值
通过AND数组组合两个tags.some条件,相当于要求文档满足:
- 存在至少一个name为"invoice"的Tag
- 存在至少一个name为"open"的Tag
这样就能精准筛选出同时包含两个指定标签的文档。
内容的提问来源于stack exchange,提问作者TheBinaryLoop
相关产品推荐
相关产品推荐

