Filter expressions help you pick only the items you want from a database query or scan. They act like a sieve, letting through just the data that matches your rules.
Filter expressions in DynamoDB
Start learning this pattern below
Jump into concepts and practice - no test required
FilterExpression = "attribute_name operator :value" ExpressionAttributeValues = {":value": {"S"|"N"|"BOOL"|... : value}} Example: FilterExpression = "Price < :maxPrice" ExpressionAttributeValues = {":maxPrice": {"N": "20"}}
Filter expressions are used with Scan or Query operations in DynamoDB.
They do not reduce the read capacity used; they filter results after reading.
FilterExpression = "Price < :maxPrice" ExpressionAttributeValues = {":maxPrice": {"N": "20"}}
FilterExpression = "contains(Category, :cat)" ExpressionAttributeValues = {":cat": {"S": "Books"}}
FilterExpression = "Status = :status" ExpressionAttributeValues = {":status": {"S": "shipped"}}
This command scans the 'Products' table and returns only items where the Price is less than 20. It shows the ProductId and Price for each matching item.
aws dynamodb scan \ --table-name Products \ --filter-expression "Price < :maxPrice" \ --expression-attribute-values '{":maxPrice":{"N":"20"}}' \ --projection-expression "ProductId, Price"
Filter expressions only filter results after DynamoDB reads the data, so they do not reduce read capacity usage.
Use ExpressionAttributeValues to safely pass values and avoid injection issues.
You can combine multiple conditions using AND, OR, and parentheses in filter expressions.
Filter expressions help you get only the data you want from a scan or query.
They use simple conditions on attributes like equals, less than, or contains.
Remember, filtering happens after reading, so it does not save read capacity.
Practice
FilterExpression in a DynamoDB scan or query?Solution
Step 1: Understand what FilterExpression does
A FilterExpression is used to specify conditions that items must meet to be returned after the scan or query reads the data.Step 2: Differentiate from other operations
It does not change the table or speed up writes; it only filters results after reading.Final Answer:
To return only items that meet specific conditions after reading all data -> Option AQuick Check:
FilterExpression filters results after reading [OK]
- Thinking FilterExpression reduces read capacity usage
- Confusing FilterExpression with key condition
- Assuming it changes the table data
status equals 'active' in DynamoDB?Solution
Step 1: Recall DynamoDB FilterExpression syntax
DynamoDB uses single equals sign (=) for equality in FilterExpressions.Step 2: Check each option
FilterExpression: "status = 'active'" uses correct syntax. The other options use invalid operators (==, equals, ===) or keywords.Final Answer:
FilterExpression: "status = 'active'" -> Option AQuick Check:
Use single equals (=) for equality in FilterExpression [OK]
- Using double or triple equals (==, ===)
- Writing 'equals' as a word
- Using incorrect operators
age, what will be the result of this scan with FilterExpression age < 30 if the table has ages 25, 30, 35, and 40?Solution
Step 1: Understand the FilterExpression condition
The condition isage < 30, meaning only items with age less than 30 pass the filter.Step 2: Check which ages satisfy the condition
From the list (25, 30, 35, 40), only 25 is less than 30.Final Answer:
Items with ages 25 only -> Option BQuick Check:
age < 30 means less than 30 [OK]
- Including age 30 when condition is less than 30
- Confusing < with <= operator
- Assuming filter changes data in table
contains(name, 'John') but it returns no results even though some items have 'John' in their name. What is the likely mistake?Solution
Step 1: Understand contains() behavior
contains() checks if the attribute contains the exact substring, including case.Step 2: Consider case sensitivity
If the data has 'john' lowercase but the filter uses 'John' with uppercase J, no match occurs.Step 3: Check other choices
Using equals() instead of contains() is not the issue since contains() is appropriate for substrings; reserved words would cause a different error; FilterExpressions are not required to be uppercase.Final Answer:
FilterExpression is case-sensitive and 'John' does not match 'john' -> Option CQuick Check:
contains() is case-sensitive [OK]
- Ignoring case sensitivity in contains()
- Not using ExpressionAttributeNames when needed
- Assuming contains() works like equals()
score is greater than 50 and status is 'active'. Which FilterExpression correctly applies both conditions?Solution
Step 1: Understand logical operators in FilterExpression
DynamoDB uses uppercase AND and OR for combining conditions.Step 2: Check each option's syntax
FilterExpression: "score > 50 AND status = 'active'" uses correct syntax with AND and single equals. FilterExpression: "score > 50 OR status = 'active'" uses OR which is incorrect for both conditions. FilterExpression: "score > 50, status = 'active'" uses comma which is invalid. FilterExpression: "score > 50 && status == 'active'" uses && and double equals which are invalid.Final Answer:
FilterExpression: "score > 50 AND status = 'active'" -> Option DQuick Check:
Use AND in uppercase and single '=' for equality [OK]
- Using OR instead of AND for both conditions
- Using commas or && instead of AND
- Using double equals (==) instead of single equals (=)
