Bird
Raised Fist0
NestJSframework~5 mins

Queries and mutations in NestJS - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a query in NestJS GraphQL?
A query is a way to ask the server for data without changing anything. It fetches information and returns it to you.
Click to reveal answer
beginner
What is a mutation in NestJS GraphQL?
A mutation is a request to change data on the server, like adding, updating, or deleting something.
Click to reveal answer
intermediate
How do you define a query method in a NestJS resolver?
Use the @Query() decorator above a method inside a resolver class. This method returns the data requested.
Click to reveal answer
intermediate
How do you define a mutation method in a NestJS resolver?
Use the @Mutation() decorator above a method inside a resolver class. This method performs data changes and returns the result.
Click to reveal answer
beginner
Why should queries not change data and mutations should?
Queries are for reading data only to keep things safe and predictable. Mutations change data because they represent actions that modify the server state.
Click to reveal answer
Which decorator is used to define a query in a NestJS GraphQL resolver?
A@Resolver()
B@Query()
C@Mutation()
D@Controller()
What does a mutation do in NestJS GraphQL?
AChanges data on the server
BFetches data without changes
CDefines a new GraphQL type
DHandles HTTP requests
Where do you place the @Mutation() decorator in NestJS?
AAbove a service method
BAbove a controller method
CAbove a resolver method
DAbove a module class
Which of these is true about queries?
AThey fetch data without side effects
BThey modify data
CThey are only used in REST APIs
DThey require authentication always
In NestJS GraphQL, what is the purpose of a resolver?
ATo style the UI components
BTo handle HTTP requests
CTo store data in the database
DTo define how queries and mutations fetch or change data
Explain how queries and mutations differ in NestJS GraphQL and how you define them in a resolver.
Think about reading vs changing data and the decorators used.
You got /5 concepts.
    Describe why it is important to separate queries and mutations in GraphQL and how this helps in building APIs with NestJS.
    Consider safety, clarity, and API design benefits.
    You got /5 concepts.

      Practice

      (1/5)
      1. In NestJS GraphQL, which decorator is used to define a method that fetches data without modifying it?
      easy
      A. @Query
      B. @Mutation
      C. @ResolveField
      D. @Subscription

      Solution

      1. Step 1: Understand the purpose of @Query

        The @Query decorator marks a method as a GraphQL query, which fetches data without changing it.
      2. Step 2: Differentiate from @Mutation

        @Mutation is used for methods that change data, so it is not correct here.
      3. Final Answer:

        @Query -> Option A
      4. Quick Check:

        Fetch data = @Query [OK]
      Hint: Queries fetch data, use @Query decorator [OK]
      Common Mistakes:
      • Confusing @Mutation with @Query
      • Using @ResolveField for queries
      • Thinking @Subscription fetches data
      2. Which of the following is the correct syntax to define a mutation method named createUser in a NestJS GraphQL resolver?
      easy
      A. @Mutation\ncreateUser() { /*...*/ }
      B. @Query(() => User)\ncreateUser() { /*...*/ }
      C. @Mutation(() => User)\ncreateUser() { /*...*/ }
      D. @Mutation()\ncreateUser() { /*...*/ }

      Solution

      1. Step 1: Check decorator usage with return type

        The correct syntax uses @Mutation with a function returning the GraphQL type, e.g., @Mutation(() => User).
      2. Step 2: Verify method name and decorator match

        The method name is createUser, and it must be decorated with @Mutation, not @Query.
      3. Final Answer:

        @Mutation(() => User)\ncreateUser() { /*...*/ } -> Option C
      4. Quick Check:

        Mutation with return type syntax = @Mutation(() => User)\ncreateUser() { /*...*/ } [OK]
      Hint: Use @Mutation(() => ReturnType) for mutations [OK]
      Common Mistakes:
      • Omitting the return type function in decorator
      • Using @Query instead of @Mutation
      • Adding empty parentheses without return type
      3. Given the following NestJS GraphQL resolver code, what will be the output when the getUser query is called?
      @Query(() => String)
      getUser() {
        return 'Alice';
      }
      medium
      A. Error: Return type mismatch
      B. "Alice"
      C. null
      D. undefined

      Solution

      1. Step 1: Analyze the @Query return type and method

        The method getUser returns the string 'Alice' and is decorated with @Query(() => String), matching the return type.
      2. Step 2: Determine the GraphQL response

        GraphQL will return the string value "Alice" as the query result.
      3. Final Answer:

        "Alice" -> Option B
      4. Quick Check:

        Matching return type returns value correctly [OK]
      Hint: Return value matches @Query type, so output is that value [OK]
      Common Mistakes:
      • Expecting an error due to missing async
      • Confusing return value with null or undefined
      • Thinking GraphQL wraps string differently
      4. Identify the error in this NestJS GraphQL mutation resolver code:
      @Mutation(() => Boolean)
      async updateUser() {
        this.userService.update();
        return true;
      }
      medium
      A. Incorrect return type Boolean instead of boolean
      B. updateUser method must return void
      C. Mutation should not be async
      D. Missing await before userService.update()

      Solution

      1. Step 1: Check async method and service call

        The method is async but calls userService.update() without await, so the update may not complete before returning.
      2. Step 2: Understand the impact of missing await

        Without await, the mutation returns true immediately, possibly before update finishes, causing unexpected behavior.
      3. Final Answer:

        Missing await before userService.update() -> Option D
      4. Quick Check:

        Async method must await async calls [OK]
      Hint: Always await async calls inside async mutations [OK]
      Common Mistakes:
      • Ignoring missing await in async methods
      • Confusing Boolean with boolean types
      • Thinking async is not allowed in mutations
      5. You want to create a NestJS GraphQL mutation that updates a user's email and returns the updated user object. Which of the following resolver method signatures correctly combines input argument and mutation decorator?
      hard
      A. @Mutation(() => User) updateEmail(@Args('email') email: string) { return this.userService.updateEmail(email); }
      B. @Query(() => User) updateEmail(@Args('email') email: string) { return this.userService.updateEmail(email); }
      C. @Mutation(() => User) updateEmail(email: string) { return this.userService.updateEmail(email); }
      D. @Mutation(() => User) updateEmail(@Args() email: string) { return this.userService.updateEmail(email); }

      Solution

      1. Step 1: Confirm correct decorator for data change

        Since this method updates data, it must use @Mutation with the return type User.
      2. Step 2: Check argument decorator usage

        The argument email is correctly decorated with @Args('email') to extract the argument from GraphQL input.
      3. Step 3: Verify method signature correctness

        @Mutation(() => User) updateEmail(@Args('email') email: string) { return this.userService.updateEmail(email); } correctly combines @Mutation, return type, and @Args usage.
      4. Final Answer:

        @Mutation(() => User) updateEmail(@Args('email') email: string) { return this.userService.updateEmail(email); } -> Option A
      5. Quick Check:

        Mutation with @Args('email') and return type = @Mutation(() => User) updateEmail(@Args('email') email: string) { return this.userService.updateEmail(email); } [OK]
      Hint: Use @Mutation with @Args('argName') for input arguments [OK]
      Common Mistakes:
      • Using @Query for mutations
      • Omitting @Args decorator
      • Using @Args() without argument name
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard