当前位置: 首页 > 知识库问答 >
问题:

嵌套查询GraphQl

程凯定
2023-03-14
type Recipe {
  id: Int
  title: String!
  author: String
  link: String
  category: String
  subcategory:String
  ingredients:[Ingredients]
}

type Ingredients{
    id:Int
    name:String!
    quantity:Float!
    measure:String
    observation:String
  }

type Query {
  recipe: [Recipe]
  ingredient:[Ingredients]
}
const db = require('../db')

class RecipeService{
  //PENDENTE FINALIZAR ESSA SERVICE
  async getRecipeByIngredient(ingredient)
}

和相应的查询解析器

 Recipe: {
    async ingredients(recipe, _, { dataSources }) {
      return await dataSources.IngredientService.getRecipeIngredients(recipe.id)
    },
  },
  Query: {
    recipe: async () => db('Recipe'),
    ingredient: async () => db('Ingredient'),
  }

这里的主要想法只是有一个过滤器,可以看到什么食谱有一些成分,用户会通过应用程序通知。

我使用数据库中的所有食谱获得了“recipe”查询,但我需要一个获取这些食谱的查询,然后使用field comprient进行筛选,例如:

  1. 食谱-糖蛋糕,配料:糖、蜂蜜、四个…
  2. 配方-天鹅绒蛋糕,配料:糖、香草、...

并且用户通知Sugar,API应该返回这2个食谱,但是如果用户通知Sugar,Honey和4个,API将只返回选项1。

有人能帮我吗?

多谢.

共有1个答案

范豪
2023-03-14

我有一个解决这个问题的方法,我想和你分享。

我在解析器上实现的筛选器:

module.exports = {
  Recipe: {
      ingredients(recipe, _, { dataSources }, info) {
        return  dataSources.IngredientService.getRecipeIngredients(recipe.id)
    }
  },
  Query: {
    recipe(obj, {name}, {dataSources}, info) {
      if (name) {
        return dataSources.IngredientService.getIngredientsByName(name)
      } else {
        return db('Recipe')  
      }
    },
    ingredient: async () => db('Ingredient'),
    recipeByIngredient:async () => db('Recipe'),
  }, Mutation: {
    createRecipe: async (_, { data }) => await (await db('Recipe').insert(data).returning('*'))[0],
    updateRecipe: async (_, { data, id }) => await (await db('Recipe').where({ id }).update(data).returning('*'))[0],
    deleteRecipe: async (_, { filter }) => {
      if (filter.id) {
        return await db('Recipe').where({ id: filter.id }).delete()
      }
      if (filter.title) {
        return await db('Recipe').where({ title: filter.title }).delete()
      }
      throw new Error('Should provide the ID or TITLE')
    }
  }
}

使用这个解析器模块,我在“recipe”查询解析器上创建了一个新的筛选器,该筛选器接收成分的“名称”以生成筛选器,并将其传递给服务以在数据库中实现筛选器。

 类似资料:
  • 我正试图用jooq编写这个查询 我尝试了几件事,但没有成功。到目前为止,我只得到 如何将num列添加到结果中?感谢您的帮助。

  • 我试图创建一个嵌套查询,它将过滤掉一些带有特定术语的文档。在本例中,我试图过滤掉在user.first中有匹配术语的文档。数据示例: 我的查询没有得到所需的结果,因为它返回给我所有未筛选的记录。我尝试使用: 我希望这里得到与过滤器不匹配的文档。在这种情况下,它应该只返回第二个文档。做这件事的正确方法是什么?

  • 问题内容: 我想使用ES进行图书搜索。因此,我决定将作者姓名和标题(作为嵌套文档)放入索引,如下所示: 我不明白的是:如何构造搜索查询,以便在搜索“一二”时仅找到第二本书,而在搜索“二三”时什么也找不到,而在搜索“一”时所有图书呢? 问题答案: 也许是这样的? 该查询基本上说一个文件必须有and 。您可以轻松地重新配置该查询。例如,如果您只想搜索作者,请删除嵌套部分。如果您想要另一本书,请更改嵌套

  • 问题内容: 默认情况下,我想给我的body元素添加绿色边框。在支持视网膜显示的设备上,我要首先检查尺寸。在ipad上,我想给我的身体一个红色边框,在iphone上,我想给它一个蓝色边框。但是像这样嵌套媒体查询是行不通的: 问题答案: 否。您需要使用运算符并将其写为两个查询。但是,您可以在将编译为CSS的SCSS中执行此操作,但是它将通过展开它们并使用运算符将它们组合在一起。 这是一个普遍的问题,一

  • 问题内容: 在PostgreSQL 9.3.4上,我有一个称为“ person”的JSON类型列,并且其中存储的数据为format 。我想检索索引为0的狗的品种。这是我运行的两个查询: 不起作用 作品 为什么必须进行类型转换?效率低下吗?我是在做错什么,还是对Postgres JSON支持有必要? 问题答案: 这是因为运算符将JSON数组元素获取为文本。您需要强制转换以将其结果转换回JSON。 您

  • 问题内容: 我正在尝试使用query_string编写查询以检索嵌套对象的数据查询。 我想做的查询的一个例子是: 其中“ a”是嵌套对象,“ id”是“ a”的字段。 我知道我可以使用嵌套查询成功地执行此任务,编写如下查询: 但是,我想避免这种情况。我不想自己弄清楚用户正在搜索嵌套字段并修改查询。我尝试使用“ fields”参数,但它似乎不适用于嵌套对象。 是否可以使用“ query_string