Graphql如何创建一个复杂的过滤器



我正在创建一个应用程序,教师可以在其中搜索资源。每个资源都标记有用于筛选结果的主题。我有一个复杂的用例,正在寻求一些建议。

例如:

  • 资源1被标记有主题";数学;。主题"数学;具有主题标签";受试者";,是第1层

  • 资源2标记有主题";代数";。主题"代数";具有主题标签";单元";,是第2层

  • 资源2标记有主题";2019";。主题"2019";具有主题标签";年";,是第1层

  • 资源2标记有主题";计算器";。主题"计算器";具有主题标签";"问题类型";,是第1层

  • 资源3标记有主题";代数";。主题"代数";具有主题标签";单元";,是第2层

  • 资源3标记有主题";2018";。主题"2018";具有主题标签";年";,是第1层

我正在尝试编写一个查询,该查询允许用户获取包含所提供主题的所有资源。

例如:

  • 为我获取所有带有主题标签的资源"2019";以及主题";代数";。这应该只返回Resource 2,因为它同时具有这两个标记
  • 给我所有标记了主题"的资源;代数";。这应该返回资源2和资源3,因为它们都标记有主题"2";代数">

我目前的尝试未能做到这一点,因为主题之间没有区别。我的查询如下所示:

query FilterBlocks($topicIds: [bigint!]) {
block(
where: {
tags: {
topic_id: { _in: $topicIds, _is_null: false }
}
}
) {
id
tags {
id
topic {
id
title
}
}
type
...
}
}

任何关于如何进行这项工作的建议都将不胜感激。

如果我是正确的,那么您正在查询具有特定主题id的特定标签的块。

您期望的内容 :只有那些标签和主题的块实际上是过滤器的一部分。

您得到的 :用所有标签和主题实现此筛选器的块。


您需要将过滤器应用于子元素以及

query FilterBlocks($topicIds: [bigint!]) {
block(
where: {
tags: {
topic_id: { _in: $topicIds, _is_null: false }
}
}
) {
id
tags(
where: {
topic_id: { _in: $topicIds, _is_null: false }
}
) {
id
topic( where: { id: { _in: $topicIds } } ) {
id
title
}
}
type
...
}
}

最新更新