81 lines
2.1 KiB
Markdown
81 lines
2.1 KiB
Markdown
---
|
|
id: 8b6h
|
|
title: DynamoDB SDK commands
|
|
tags: [AWS, databases, dynamodb]
|
|
created: Sunday, June 23, 2024
|
|
---
|
|
|
|
# DynamoDB SDK commands
|
|
|
|
The following commands are for using `@aws-sdk/client-dynamodb` (the JS SDK).
|
|
|
|
## Create client
|
|
|
|
```js
|
|
import DynamoDBClient from "@aws-sdk/client-dynamodb";
|
|
|
|
const client = new DynamoDBClient({
|
|
region: "eu-west-2",
|
|
accessKeyId: process.env.ACCESS_KEY_ID,
|
|
secretAccessKey: process.env.ACCESS_KEY_ID,
|
|
});
|
|
```
|
|
|
|
### DynamoDB Document Client
|
|
|
|
The Document Client returns the data as a standard JSON document in the manner
|
|
of a document-based NoSQL database. Without it, DynamoDB will return the data
|
|
with type data which is unwieldy and hard to parse.
|
|
|
|
To transform into a document structure:
|
|
|
|
```js
|
|
import { DynamoDBClient } from "@aws-sdk/client-dynamodb";
|
|
import { DynamoDBDocumentClient } from "@aws-sdk/lib-dynamodb";
|
|
|
|
const client = new DynamoDBClient({
|
|
region: "eu-west-2",
|
|
accessKeyId: process.env.ACCESS_KEY_ID,
|
|
secretAccessKey: process.env.ACCESS_KEY_ID,
|
|
});
|
|
|
|
const dynamoDbDocumentClient = DynamoDBDocumentClient.from(client);
|
|
```
|
|
|
|
## Query a table
|
|
|
|
Querying is the most performant and cost-effective method since it is an O(1)
|
|
lookup against a partition key or secondary index.
|
|
|
|
```js
|
|
import { DynamoDBDocumentClient, QueryCommand } from "@aws-sdk/lib-dynamodb";
|
|
|
|
const params = {
|
|
TableName: "YourTableName",
|
|
KeyConditionExpression: "#pk = :pk",
|
|
ExpressionAttributeNames: { "#pk": "PrimaryKeyAttributeName" },
|
|
ExpressionAttributeValues: { ":pk": "PrimaryKeyValue" },
|
|
};
|
|
|
|
const dynamoDbDocumentClient = DynamoDBDocumentClient.from(client);
|
|
const data = await dynamoDbDocumentClient.send(new QueryCommand(params));
|
|
console.log(data);
|
|
```
|
|
|
|
## Scan a table
|
|
|
|
Scanning is less performant (O(n)) and most expensive since it requires checking
|
|
every item in the database.
|
|
|
|
```js
|
|
import { DynamoDBDocumentClient, ScanCommand } from "@aws-sdk/lib-dynamodb";
|
|
|
|
const params = {
|
|
TableName: "YourTableName",
|
|
};
|
|
|
|
const dynamoDbDocumentClient = DynamoDBDocumentClient.from(client);
|
|
const data = await dynamoDbDocumentClient.send(new ScanCommand(params));
|
|
```
|
|
|
|
## Related notes
|