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

Graphql过滤器查询结果

惠志
2023-03-14

我刚开始使用graphql,我想在我的API中改进一些特性,其中之一是得到一个更好的过滤器。这个API应该返回一些基于配料的食谱,用户将在相应的应用程序中通知,这是我使用的解析器:

module.exports = {
  Recipe: {
    async ingredients(recipe, _, { dataSources }) {
      return await dataSources.IngredientService.getRecipeIngredients(recipe.id)
    },
  },
  Query: {
    recipe: async () =>  db('Recipe'),
    ingredient: async () => db('Ingredient'),
    recipeByIngredient:async () => db('Recipe'),
  }}
class ingredientService {
  async getRecipeIngredients(recipe_id) {
      const filteredRecipe = db('Ingredient')
      .where({ recipe_id })
      .join('Recipe', 'Recipe.id', '=', recipe_id)
      .select('Recipe.*', 'Ingredient.*')
      .whereIn('Ingredient.name', ["sal", "açucar"])
      return await filteredRecipe
  }
type Query {
  recipe(name:[String]): [Recipe]
  ingredient:[Ingredients]
  recipeByIngredient(ingredients:String):[Ingredients]
}
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
  }
    null

共有1个答案

晏炳
2023-03-14

通常,为了处理筛选,我设置了create一个condition类型,根据上下文命名。在这里,您可能希望传递一个类型recipecondition,该类型定义字段以有效地筛选返回的食谱或范围,例如,基于它是否在数据存储中包含成分。这假设您将来可能需要添加附加条件(否则,可能只是在sql中硬编码条件)。


    type RecipeCondition {
      ingredientsRequired: Bool
      
      // Add other condition fields here as needed
      ...
     }


   type Query {
     recipe(name:[String], condition: RecipeCondition): [Recipe]
       ...
    }

我会在顶层处理过滤器,最初使用db服务获取食谱(而不是在成分子解析器中处理)。您可以简单地使用这个条件(在recipe resolver arg上可访问),并将其传递给最初获取recipes数组的db服务func。如果条件comprightsRequiredtrue,则适当地使用sql进行筛选(将需要连接到配料表和where条件--如果您传递的是食谱名称数组,这可能需要迭代完成)。这样,一个没有配料的配方甚至不会击中配料子解析器(假设需要这种条件)。

 类似资料:
  • 问题内容: “过滤后的查询和过滤器”与“根查询和过滤器”之间有什么区别吗?例如 情况1: 情况2: 我在http://elasticsearch-users.115913.n3.nabble.com/Filtered-query-vs-using- filter-outside-td3960119.html中 找到了此讨论,但所引用的URL是404,并且解释过于简洁我。 请示教或提供指出这些区别的

  • 问题内容: 我什么时候应该使用查询或过滤器或两者的某种组合都看不到任何描述。它们之间有什么区别?谁能解释一下? 问题答案: 区别很简单:过滤器被缓存并且不影响得分,因此比查询要快。也在这里看看。假设查询通常是用户输入的内容,并且几乎是不可预测的,而过滤器则可以帮助用户缩小搜索结果的范围,例如使用构面。

  • 本文向大家介绍dynamics-crm 使用过滤器过滤API查询,包括了dynamics-crm 使用过滤器过滤API查询的使用技巧和注意事项,需要的朋友参考一下 示例 您可以使用filter属性从CRM检索值的子集。在此示例中,仅返回公司名称等于CompanyName的帐户。            

  • 如何使用Graphql SPQR实现查询过滤器和排序? 我正在寻找一个解决方案,用Graphql SPQR的模式看起来像这样。

  • 问题内容: 我有一个带有许多字段的表。我正在尝试在asp.net中创建搜索过滤器,以便用户可以按一个或多个字段进行搜索。所以基本上我想创建一个包含4个参数的存储过程,如果它不为null,它将把参数附加到WHERE子句中。 TableExample有4列,Col1 Col2 Col3 Col4 我希望有一种方法可以用一个存储过程完成此操作,而不必为每种可能的组合创建一个。 我正在尝试类似的方法,虽然

  • 我有证据: 我想从我的数据库中获得结果,它包含每个对象中的列表technicStatusList=new arraylist<>(),我想在其中有一个TechnicStatus仅值为isactive=true。 为此,我使用了相同的JPQL查询: 但是得到一个包含TechnicStatus的结果,该结果返回一个包含true和false的TechnicStatus.isactive=true,Tec