Update mutation pattern in GraphQL - Time & Space Complexity
When we update data using a GraphQL mutation, it's important to know how the time it takes changes as the data grows.
We want to understand how the update operation's cost changes when there are more records or fields involved.
Analyze the time complexity of the following update mutation.
mutation UpdateUser($id: ID!, $input: UserUpdateInput!) {
updateUser(id: $id, input: $input) {
id
name
email
}
}
This mutation updates a single user's data by their ID and returns some fields.
Look for repeated work inside the update process.
- Primary operation: Searching for the user by ID in the database.
- How many times: Once per update request, no loops inside the mutation itself.
The time to update depends mostly on how fast the database finds the user by ID.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 users | About 10 steps to find the user if no index |
| 100 users | About 100 steps to find the user if no index |
| 1000 users | About 1000 steps to find the user if no index |
Pattern observation: Without an index, the search grows linearly with the number of users.
Time Complexity: O(n)
This means the update takes longer as the number of users grows, because it searches through them one by one.
[X] Wrong: "Updating a single user always takes the same time no matter how many users exist."
[OK] Correct: If the database does not use an index, it must check many users to find the right one, so time grows with the number of users.
Understanding how update operations scale helps you explain real-world database behavior clearly and confidently.
"What if the database uses an index on the user ID? How would the time complexity change?"
Practice
update mutation in GraphQL?Solution
Step 1: Understand the role of update mutations
Update mutations modify existing records by identifying them and applying new values.Step 2: Differentiate from other mutation types
Delete mutations remove data, create mutations add new data, and queries fetch data without changes.Final Answer:
To change existing data by specifying an ID and new values -> Option BQuick Check:
Update mutation = change existing data [OK]
- Confusing update with create or delete mutations
- Thinking update fetches data without changes
- Assuming update creates new records
Solution
Step 1: Identify the mutation keyword and operation
Update mutations use themutationkeyword and specify the update operation with an ID and input object.Step 2: Check the options for correct mutation syntax
mutation { updateUser(id: "123", input: {name: "Alice"}) { id name } } usesmutationwithupdateUserand input fields correctly; others use wrong operation or query keyword.Final Answer:
mutation { updateUser(id: "123", input: {name: "Alice"}) { id name } } -> Option AQuick Check:
Update mutation syntax = mutation + update operation + input [OK]
- Using 'query' instead of 'mutation'
- Using create or delete operation instead of update
- Missing input object for new values
mutation { updatePost(id: "5", input: {title: "New Title"}) { id title content } }What will be the output if the post with ID 5 exists and has content "Old content"?
Solution
Step 1: Understand the mutation effect
The mutation updates the post with ID 5, changing only the title to "New Title" while keeping other fields unchanged.Step 2: Predict the returned data
The response includes the updated title and the unchanged content "Old content" along with the ID.Final Answer:
{ "data": { "updatePost": { "id": "5", "title": "New Title", "content": "Old content" } } } -> Option CQuick Check:
Update mutation returns updated fields plus unchanged fields [OK]
- Assuming all fields reset or become null
- Expecting error when post exists
- Ignoring unchanged fields in output
mutation { updateUser(input: {name: "Bob"}) { id name } }Solution
Step 1: Check required arguments for update mutation
Update mutations require an ID to identify the record to update.Step 2: Analyze the given mutation
The mutation lacks the ID argument, so it cannot know which user to update.Final Answer:
Missing the ID argument to specify which user to update -> Option AQuick Check:
Update mutation must include ID argument [OK]
- Omitting the ID argument
- Confusing input object name
- Using 'query' instead of 'mutation'
mutation UpdateUser($id: ID!, $email: String!, $phone: String) {
updateUser(id: $id, input: {email: $email, phone: $phone}) {
id
email
phone
}
}Solution
Step 1: Understand conditional updates in GraphQL
To update only provided fields, omit fields not meant to be changed from the input object.Step 2: Analyze options for handling optional phone
Sending null or empty string may overwrite data; omitting the phone field avoids unintended changes.Final Answer:
Remove phone field from input object when not updating -> Option DQuick Check:
Omit fields to keep existing values unchanged [OK]
- Sending null overwrites existing data
- Using empty string instead of omitting field
- Creating unnecessary multiple mutations
Ready to prove it?
Pass the test and this pattern moves unknown
