0
0
DynamodbHow-ToBeginner · 4 min read

How to Use Select in DynamoDB Queries and Scans

In DynamoDB, the Select parameter controls which attributes are returned in Query or Scan operations. You can choose to return all attributes, only specific attributes, or just the count of matching items by setting Select to ALL_ATTRIBUTES, SPECIFIC_ATTRIBUTES, or COUNT respectively.
📐

Syntax

The Select parameter is used in Query and Scan requests to specify which attributes to return.

  • ALL_ATTRIBUTES: Returns all attributes of the matching items.
  • ALL_PROJECTED_ATTRIBUTES: Returns only attributes that are projected into an index.
  • SPECIFIC_ATTRIBUTES: Returns only the attributes you specify in ProjectionExpression.
  • COUNT: Returns only the number of matching items, not the items themselves.

Example syntax in a Query request:

javascript
const params = {
  TableName: 'YourTableName',
  KeyConditionExpression: 'PartitionKey = :pk',
  ExpressionAttributeValues: {
    ':pk': { S: 'someKeyValue' }
  },
  Select: 'SPECIFIC_ATTRIBUTES',
  ProjectionExpression: 'Attribute1, Attribute2'
};
💻

Example

This example demonstrates a DynamoDB Query operation that uses Select to return only specific attributes from matching items.

javascript
import { DynamoDBClient, QueryCommand } from "@aws-sdk/client-dynamodb";

const client = new DynamoDBClient({ region: "us-east-1" });

async function querySpecificAttributes() {
  const params = {
    TableName: "Music",
    KeyConditionExpression: "Artist = :artist",
    ExpressionAttributeValues: {
      ":artist": { S: "No One You Know" }
    },
    Select: "SPECIFIC_ATTRIBUTES",
    ProjectionExpression: "SongTitle, AlbumTitle"
  };

  try {
    const data = await client.send(new QueryCommand(params));
    console.log("Query succeeded:", JSON.stringify(data.Items));
  } catch (err) {
    console.error("Query failed:", err);
  }
}

querySpecificAttributes();
Output
Query succeeded: [{"SongTitle":{"S":"Call Me Today"},"AlbumTitle":{"S":"Somewhat Famous"}}, {"SongTitle":{"S":"I Want It That Way"},"AlbumTitle":{"S":"The Best Of"}}]
⚠️

Common Pitfalls

Common mistakes when using Select include:

  • Setting Select to SPECIFIC_ATTRIBUTES but forgetting to provide a ProjectionExpression, which causes an error.
  • Using ALL_PROJECTED_ATTRIBUTES on a table without a proper index projection, resulting in empty results.
  • Expecting COUNT to return items instead of just the count number.

Always ensure your ProjectionExpression matches the attributes you want when using SPECIFIC_ATTRIBUTES.

javascript
/* Wrong: Missing ProjectionExpression with SPECIFIC_ATTRIBUTES */
const wrongParams = {
  TableName: 'Music',
  KeyConditionExpression: 'Artist = :artist',
  ExpressionAttributeValues: { ':artist': { S: 'No One You Know' } },
  Select: 'SPECIFIC_ATTRIBUTES'
};

/* Right: Include ProjectionExpression */
const rightParams = {
  TableName: 'Music',
  KeyConditionExpression: 'Artist = :artist',
  ExpressionAttributeValues: { ':artist': { S: 'No One You Know' } },
  Select: 'SPECIFIC_ATTRIBUTES',
  ProjectionExpression: 'SongTitle, AlbumTitle'
};
📊

Quick Reference

Select ValueDescription
ALL_ATTRIBUTESReturns all attributes from matching items.
ALL_PROJECTED_ATTRIBUTESReturns only attributes projected into an index.
SPECIFIC_ATTRIBUTESReturns only attributes specified in ProjectionExpression.
COUNTReturns only the count of matching items, no attributes.

Key Takeaways

Use the Select parameter to control which attributes DynamoDB returns in Query or Scan operations.
Set Select to SPECIFIC_ATTRIBUTES only when you provide a ProjectionExpression listing desired attributes.
Use COUNT to get the number of matching items without retrieving item data.
ALL_ATTRIBUTES returns full items but can increase read costs and response size.
ALL_PROJECTED_ATTRIBUTES works only with indexes that project attributes.