Bird
Raised Fist0
GraphQLquery~20 mins

Parent (root) argument in GraphQL - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
GraphQL Parent Argument Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ query_result
intermediate
2:00remaining
Understanding the root parent argument in GraphQL resolver
Given the following GraphQL resolver snippet, what will be the value of the parent argument when resolving the user field in the root query?
GraphQL
const resolvers = {
  Query: {
    user(parent, args, context, info) {
      return { id: args.id, name: "Alice" };
    }
  }
};
AAn empty object {}
Bundefined
CThe root query object
Dnull
Attempts:
2 left
💡 Hint
Think about what the parent argument represents at the root level of a GraphQL query.
❓ query_result
intermediate
2:00remaining
Parent argument value in nested GraphQL resolvers
Consider this GraphQL schema and resolver snippet. What will be the value of the parent argument when resolving the posts field inside the User type?
GraphQL
const resolvers = {
  Query: {
    user(parent, args) {
      return { id: 1, name: "Bob" };
    }
  },
  User: {
    posts(parent, args) {
      return [{ id: 101, title: "Hello" }];
    }
  }
};
AThe root query object
Bnull
Cundefined
DThe user object { id: 1, name: "Bob" }
Attempts:
2 left
💡 Hint
The parent argument in nested resolvers is the object returned by the parent field resolver.
📝 Syntax
advanced
2:00remaining
Identify the syntax error in resolver using parent argument
Which option contains a syntax error in the way the parent argument is used in this resolver function?
GraphQL
const resolvers = {
  User: {
    posts(parent, args) {
      return parent.posts;
    }
  }
};
Aposts(parent args) { return parent.posts; }
Bposts(parent, args) { return parent.posts; }
Cposts(parent, args) => { return parent.posts; }
Dposts: function(parent, args) { return parent.posts; }
Attempts:
2 left
💡 Hint
Check the function parameter list syntax carefully.
❓ optimization
advanced
2:00remaining
Optimizing resolver usage of parent argument to avoid redundant database calls
Given a resolver for User.posts that fetches posts from the database, which option best uses the parent argument to avoid fetching the user again inside the posts resolver?
GraphQL
const resolvers = {
  Query: {
    user(parent, args) {
      return db.getUserById(args.id);
    }
  },
  User: {
    posts(parent, args) {
      // Which option below is best?
    }
  }
};
Areturn db.getPostsByUserId(args.userId);
Bconst user = db.getUserById(parent.id); return db.getPostsByUserId(user.id);
Creturn db.getPostsByUserId(parent.id);
Dreturn db.getPosts();
Attempts:
2 left
💡 Hint
Use the parent argument to get the user id directly.
🧠 Conceptual
expert
2:00remaining
Why is the parent argument null at the root level in GraphQL?
In GraphQL, the parent argument in resolvers is undefined at the root query level. Why is this the case?
ABecause the root query has no parent object above it in the query execution hierarchy.
BBecause the parent argument is only used for mutations, not queries.
CBecause the parent argument is deprecated and replaced by context.
DBecause the parent argument is always an empty object at the root.
Attempts:
2 left
💡 Hint
Think about the structure of a GraphQL query and how resolvers are called.

Practice

(1/5)
1. What does the parent argument represent in a GraphQL resolver function?
easy
A. It is the root query object that starts the GraphQL execution.
B. It is the context object shared across all resolvers.
C. It contains the arguments passed to the current query.
D. It holds the result of the previous resolver in the resolver chain.

Solution

  1. Step 1: Understand resolver chaining

    Resolvers can be nested, so the parent argument holds the output of the previous resolver in the chain.
  2. Step 2: Differentiate from other arguments

    The context is shared globally, args are query inputs, and root is the initial query object, not the parent.
  3. Final Answer:

    It holds the result of the previous resolver in the resolver chain. -> Option D
  4. Quick Check:

    parent = previous resolver result [OK]
Hint: Remember: parent is previous resolver's output [OK]
Common Mistakes:
  • Confusing parent with context
  • Thinking parent holds query arguments
  • Assuming parent is always the root query
2. Which of the following is the correct way to define a resolver function using the parent argument in GraphQL?
easy
A. resolver(parent, args, context, info) { ... }
B. resolver(args, parent, context, info) { ... }
C. resolver(context, parent, args, info) { ... }
D. resolver(info, args, parent, context) { ... }

Solution

  1. Step 1: Recall resolver argument order

    The standard resolver function signature is resolver(parent, args, context, info).
  2. Step 2: Verify argument positions

    Only resolver(parent, args, context, info) { ... } matches the correct order with parent as the first argument.
  3. Final Answer:

    resolver(parent, args, context, info) { ... } -> Option A
  4. Quick Check:

    Parent is first argument in resolver [OK]
Hint: Parent is always first argument in resolver [OK]
Common Mistakes:
  • Swapping parent and args positions
  • Placing context before parent
  • Misordering resolver parameters
3. Given the following GraphQL schema and resolvers, what will be the output of the query { user { id name posts { title } } }?
type User {
  id: ID!
  name: String!
  posts: [Post!]!
}

type Post {
  title: String!
}

const resolvers = {
  User: {
    posts(parent) {
      return postsData.filter(post => post.userId === parent.id);
    }
  }
};

const postsData = [
  { title: "Post 1", userId: "1" },
  { title: "Post 2", userId: "2" },
  { title: "Post 3", userId: "1" }
];
medium
A. { "user": { "id": "2", "name": "Bob", "posts": [{ "title": "Post 1" }, { "title": "Post 3" }] } }
B. { "user": { "id": "1", "name": "Alice", "posts": [{ "title": "Post 2" }] } }
C. { "user": { "id": "1", "name": "Alice", "posts": [{ "title": "Post 1" }, { "title": "Post 3" }] } }
D. Error: posts resolver missing parent argument

Solution

  1. Step 1: Understand parent argument usage in posts resolver

    The posts resolver uses parent.id to filter posts belonging to the user.
  2. Step 2: Match posts with user id "1"

    Posts with userId === "1" are "Post 1" and "Post 3".
  3. Final Answer:

    { "user": { "id": "1", "name": "Alice", "posts": [{ "title": "Post 1" }, { "title": "Post 3" }] } } -> Option C
  4. Quick Check:

    Parent.id filters posts correctly [OK]
Hint: Parent holds user data to filter posts [OK]
Common Mistakes:
  • Ignoring parent.id and returning all posts
  • Mixing user IDs in filtering
  • Assuming posts resolver lacks parent argument
4. Identify the error in this resolver function using the parent argument:
const resolvers = {
  User: {
    posts(args) {
      return postsData.filter(post => post.userId === args.id);
    }
  }
};
medium
A. The resolver should not use filter on postsData.
B. The resolver is missing the parent argument as the first parameter.
C. The resolver should use context instead of args.
D. The resolver function name should be Posts with uppercase P.

Solution

  1. Step 1: Check resolver function parameters

    The resolver function must have parent as the first argument to access parent data.
  2. Step 2: Identify misuse of args instead of parent

    The code incorrectly uses args.id instead of parent.id to filter posts.
  3. Final Answer:

    The resolver is missing the parent argument as the first parameter. -> Option B
  4. Quick Check:

    Parent argument must be first in resolver [OK]
Hint: Always include parent as first resolver argument [OK]
Common Mistakes:
  • Using args instead of parent for parent data
  • Ignoring resolver parameter order
  • Assuming function name case matters
5. You want to fetch a list of books with their authors' names using nested resolvers. The Book type has an authorId field, and the Author type has id and name. How should you use the parent argument in the author resolver inside Book to get the correct author name?
hard
A. Use parent.authorId to find the author by matching id.
B. Use args.authorId to find the author by matching id.
C. Use context.authorId to find the author by matching id.
D. Use info.authorId to find the author by matching id.

Solution

  1. Step 1: Understand nested resolver data flow

    The author resolver inside Book receives the book object as parent.
  2. Step 2: Access authorId from parent to find author

    Use parent.authorId to look up the author by matching id in authors data.
  3. Final Answer:

    Use parent.authorId to find the author by matching id. -> Option A
  4. Quick Check:

    Parent holds book data, use parent.authorId [OK]
Hint: Parent holds book; use parent.authorId for author lookup [OK]
Common Mistakes:
  • Using args instead of parent for authorId
  • Trying to get authorId from context or info
  • Ignoring parent argument in nested resolver
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