Bird
Raised Fist0
DynamoDBquery~20 mins

Document client abstraction in DynamoDB - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Document Client Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ query_result
intermediate
2:00remaining
What is the output of this DynamoDB DocumentClient get operation?
Consider a DynamoDB table named Users with a primary key userId. The table contains an item with userId = '123' and name = 'Alice'. What will be the output of the following DocumentClient get call?
DynamoDB
const AWS = require('aws-sdk');
const docClient = new AWS.DynamoDB.DocumentClient();

const params = {
  TableName: 'Users',
  Key: { userId: '123' }
};

docClient.get(params).promise().then(data => console.log(data));
A{"Item": {"userId": "123", "name": "Alice"}}
B{"Items": [{"userId": "123", "name": "Alice"}]}
C{"userId": "123", "name": "Alice"}
D{"Count": 1, "Items": [{"userId": "123", "name": "Alice"}]}
Attempts:
2 left
💡 Hint
The get operation returns a single item inside the 'Item' property.
📝 Syntax
intermediate
2:00remaining
Which option correctly updates an attribute using DocumentClient update method?
You want to update the attribute age to 30 for the item with userId = '123' in the Users table. Which of the following params objects is syntactically correct for DocumentClient update?
A{ TableName: 'Users', Key: { userId: '123' }, UpdateExpression: 'set age = :a', ExpressionAttributeValues: { ':a': '30' }, ReturnValues: 'UPDATED_NEW' }
B{ TableName: 'Users', Key: { userId: '123' }, UpdateExpression: 'set age = a', ExpressionAttributeValues: { ':a': 30 }, ReturnValues: 'UPDATED_NEW' }
C{ TableName: 'Users', Key: { userId: '123' }, UpdateExpression: 'set age = :a', ExpressionAttributeValues: { 'a': 30 }, ReturnValues: 'UPDATED_NEW' }
D{ TableName: 'Users', Key: { userId: '123' }, UpdateExpression: 'set age = :a', ExpressionAttributeValues: { ':a': 30 }, ReturnValues: 'UPDATED_NEW' }
Attempts:
2 left
💡 Hint
ExpressionAttributeValues keys must start with a colon and match placeholders in UpdateExpression.
❓ optimization
advanced
2:00remaining
How to efficiently retrieve multiple items by keys using DocumentClient?
You need to get multiple items from the Users table by their userId keys: '123', '456', and '789'. Which approach is the most efficient and correct using DocumentClient?
AUse query with KeyConditionExpression userId IN ('123', '456', '789')
BUse batchGet with RequestItems: { Users: { Keys: [ { userId: '123' }, { userId: '456' }, { userId: '789' } ] } }
CUse scan with FilterExpression to filter userId IN ('123', '456', '789')
DCall get three times sequentially with each userId key
Attempts:
2 left
💡 Hint
BatchGet allows retrieving multiple items by keys in one request.
🔧 Debug
advanced
2:00remaining
Why does this DocumentClient put operation fail with a ValidationException?
You try to put an item into the Users table with this code but get a ValidationException error. What is the cause?
DynamoDB
const params = {
  TableName: 'Users',
  Item: {
    userId: 123,
    name: 'Bob'
  }
};

await docClient.put(params).promise();
AThe userId should be a string, not a number, because the table's primary key is a string.
BThe TableName is case sensitive and should be 'users' instead of 'Users'.
CThe Item property should be named Attributes instead of Item.
DThe put method requires a ConditionExpression to succeed.
Attempts:
2 left
💡 Hint
Check the data type of the primary key value against the table schema.
🧠 Conceptual
expert
2:00remaining
What is a key benefit of using DynamoDB DocumentClient abstraction?
Why do developers prefer using the DynamoDB DocumentClient abstraction over the low-level DynamoDB client?
AIt encrypts data automatically before sending to DynamoDB.
BIt provides built-in support for transactions without additional configuration.
CIt automatically converts JavaScript objects to DynamoDB attribute value format and back, simplifying code.
DIt allows querying tables without specifying keys or indexes.
Attempts:
2 left
💡 Hint
Think about how DocumentClient handles data types compared to the low-level client.

Practice

(1/5)
1. What is the main benefit of using the DynamoDB Document Client abstraction?
easy
A. It requires you to write complex JSON expressions for queries.
B. It allows you to work with plain JavaScript objects without manual data conversion.
C. It only supports string data types in DynamoDB.
D. It disables the use of PutCommand and GetCommand.

Solution

  1. Step 1: Understand Document Client purpose

    The Document Client simplifies interaction by letting you use normal JavaScript objects.
  2. Step 2: Compare options

    The incorrect options describe limitations or incorrect features, while the correct one states the main benefit.
  3. Final Answer:

    It allows you to work with plain JavaScript objects without manual data conversion. -> Option B
  4. Quick Check:

    Document Client simplifies data handling = A [OK]
Hint: Document Client hides data format details, use plain objects [OK]
Common Mistakes:
  • Thinking you must manually convert data formats
  • Believing it only supports strings
  • Confusing commands it supports
2. Which of the following is the correct way to import the DynamoDB Document Client in JavaScript?
easy
A. import DynamoDBDocumentClient from 'aws-sdk';
B. const DynamoDBDocumentClient = require('aws-sdk/lib-dynamodb');
C. import { DynamoDBDocumentClient } from "@aws-sdk/lib-dynamodb";
D. const { DynamoDBDocumentClient } = require('@aws-sdk/client-dynamodb');

Solution

  1. Step 1: Identify correct import syntax

    The Document Client is imported from "@aws-sdk/lib-dynamodb" using ES module syntax.
  2. Step 2: Eliminate incorrect options

    The CommonJS require uses the wrong path; importing from 'aws-sdk' uses the wrong package; destructuring from '@aws-sdk/client-dynamodb' uses the wrong package.
  3. Final Answer:

    import { DynamoDBDocumentClient } from "@aws-sdk/lib-dynamodb"; -> Option C
  4. Quick Check:

    Correct ES module import from lib-dynamodb = A [OK]
Hint: Use ES module import from '@aws-sdk/lib-dynamodb' [OK]
Common Mistakes:
  • Importing from '@aws-sdk/client-dynamodb' instead
  • Using require with wrong package
  • Missing curly braces in import
3. Given the following code snippet using DynamoDB Document Client, what will be the output if the item exists?
const params = { TableName: "Users", Key: { userId: "123" } };
const command = new GetCommand(params);
const data = await docClient.send(command);
console.log(data.Item);
medium
A. An object representing the user with userId '123', e.g., { userId: '123', name: 'Alice' }
B. A string containing the userId '123'
C. An error because GetCommand is not supported by Document Client
D. Undefined, because data.Item is not returned

Solution

  1. Step 1: Understand GetCommand with Document Client

    GetCommand returns an object with an Item property containing the requested item if it exists.
  2. Step 2: Analyze console.log output

    Logging data.Item prints the full object stored for userId '123', not just a string or undefined.
  3. Final Answer:

    An object representing the user with userId '123', e.g., { userId: '123', name: 'Alice' } -> Option A
  4. Quick Check:

    GetCommand returns item object = B [OK]
Hint: GetCommand returns full item object in data.Item [OK]
Common Mistakes:
  • Expecting only the key value as output
  • Thinking GetCommand is unsupported
  • Assuming data.Item is undefined
4. Identify the error in this DynamoDB Document Client code snippet:
const params = { TableName: "Products", Item: { id: 101, name: "Pen" } };
const command = new GetCommand(params);
const result = await docClient.send(command);
console.log(result);
medium
A. Using GetCommand with an Item parameter instead of Key
B. Missing await keyword before docClient.send
C. TableName should be lowercase
D. Item should be a string, not an object

Solution

  1. Step 1: Check command and parameters

    GetCommand requires a Key parameter to identify the item, not an Item parameter.
  2. Step 2: Validate other options

    Await is present, TableName is case-sensitive but correct, and Item must be an object for PutCommand, not GetCommand.
  3. Final Answer:

    Using GetCommand with an Item parameter instead of Key -> Option A
  4. Quick Check:

    GetCommand needs Key, not Item = D [OK]
Hint: GetCommand uses Key, PutCommand uses Item [OK]
Common Mistakes:
  • Confusing Item and Key parameters
  • Ignoring case sensitivity of TableName
  • Forgetting await keyword
5. You want to add a new user to the DynamoDB table 'Users' using the Document Client. Which code snippet correctly performs this operation?
hard
A. const params = { TableName: 'Users', Key: { userId: 'u123' }, Item: { name: 'Bob' } }; const command = new PutCommand(params); await docClient.send(command);
B. const params = { TableName: 'Users', Key: { userId: 'u123' } }; const command = new PutCommand(params); await docClient.send(command);
C. const params = { TableName: 'Users', Item: { userId: 'u123' } }; const command = new GetCommand(params); await docClient.send(command);
D. const params = { TableName: 'Users', Item: { userId: 'u123', name: 'Bob' } }; const command = new PutCommand(params); await docClient.send(command);

Solution

  1. Step 1: Understand PutCommand parameters

    PutCommand requires an Item parameter with the full object to insert, including the key attributes.
  2. Step 2: Analyze each option

    Using both Key and Item is incorrect; using only Key omits the Item; using GetCommand retrieves instead of inserts; the correct snippet uses Item containing both key and attributes.
  3. Final Answer:

    const params = { TableName: 'Users', Item: { userId: 'u123', name: 'Bob' } }; const command = new PutCommand(params); await docClient.send(command); -> Option D
  4. Quick Check:

    PutCommand with Item including key = C [OK]
Hint: PutCommand needs full Item object including keys [OK]
Common Mistakes:
  • Using Key instead of Item for PutCommand
  • Mixing GetCommand with PutCommand parameters
  • Omitting key attributes in Item
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