ElectroDB is a DynamoDB library to ease the use of having multiple entities and complex hierarchical relationships in a single DynamoDB table.
Please submit issues/feedback or reach out on Twitter @tinkertamper.
Visit the v3 migration page to learn more about this new update.
Documentation now found at ElectroDB.dev
ElectroDB's new website for Documentation is now live at electrodb.dev.
Try out and share ElectroDB Models, Services, and Single Table Design at electrodb.fun
ExpressionAttributeNames
, ExpressionAttributeValues
, and FilterExpressions
.ExpressionAttributeNames
, ExpressionAttributeValues
, and ConditionExpressions
.ExpressionAttributeNames
, ExpressionAttributeValues
, and UpdateExpressions
..find()
or .match()
methods to dynamically and efficiently query based on defined sort key structures.Entities
, Services
, Models
directly from the command line.Entities
, Services
, Models
for easier prototyping.Turn this
tasks
.patch({
team: "core",
task: "45-662",
project: "backend",
})
.set({ status: "open" })
.add({ points: 5 })
.append({
comments: [
{
user: "janet",
body: "This seems half-baked.",
},
],
})
.where(({ status }, { eq }) => eq(status, "in-progress"))
.go();
Into This
{
"UpdateExpression": "SET #status = :status_u0, #points = #points + :points_u0, #comments = list_append(#comments, :comments_u0), #updatedAt = :updatedAt_u0, #gsi1sk = :gsi1sk_u0",
"ExpressionAttributeNames": {
"#status": "status",
"#points": "points",
"#comments": "comments",
"#updatedAt": "updatedAt",
"#gsi1sk": "gsi1sk"
},
"ExpressionAttributeValues": {
":status0": "in-progress",
":status_u0": "open",
":points_u0": 5,
":comments_u0": [
{
"user": "janet",
"body": "This seems half-baked."
}
],
":updatedAt_u0": 1630977029015,
":gsi1sk_u0": "$assignments#tasks_1#status_open"
},
"TableName": "your_table_name",
"Key": {
"pk": "$taskapp#team_core",
"sk": "$tasks_1#project_backend#task_45-662"
},
"ConditionExpression": "attribute_exists(pk) AND attribute_exists(sk) AND #status = :status0"
}