ElectroDB类型安全的 DynamoDB 库
ElectroDB 是一个 DynamoDB 库,以方便使用复杂的分层关系建模和实现单表设计,同时保持你的查询代码可读性。
特性:
- 与现有表一起使用- ElectroDB 简化了 DocumentClient 参数的构建,因此你可以将其与现有表/数据一起使用。
- 属性架构强制-为你的实体定义一个具有强制属性验证、默认值、类型、别名等的模式。
- 轻松编写分层访问模式- 为你的索引规划和设计分层键,以增加你可能的访问模式。
- 单表实体隔离- 使用 ElectroDB 创建的实体在使用单表时不会与其他实体发生冲突。
- 简化的排序键条件查询- 通过轻松构建组合键来编写高效的排序键查询。
- 简化的 Filter Composition-轻松创建 DynamoDB 查询复杂可读的过滤器,而无需担心
ExpressionAttributeNames、ExpressionAttributeValues以及FilterExpressions的实现。 - 简化的 Update Expression Composition-轻松制作类型安全的更新操作,而无需格式化繁琐的
ExpressionAttributeNames、ExpressionAttributeValues和UpdateExpressions。 - 跨实体轻松查询- 定义“集合”以创建强大/惯用的查询,这些查询在单个请求中返回多个实体。
- 自动索引选择- 使用
.find()或.match()方法根据定义的排序键结构动态有效地查询。 - 简化的分页 API -
.page()用于轻松地对结果集进行分页。 - 与你现有的解决方案一起使用- 如果你已经在使用 DynamoDB,并且想要使用 ElectroDB,请使用自定义复合属性模板来利用您现有的密钥结构。
- TypeScript 支持-现在在 Beta 版中为实体和服务提供强大的TypeScript支持。
- 通过查询终端直接-直接从命令行对你的实体、服务、模型执行查询。
- Stand Up Rest Server for Entity - 建立一个 REST Server 来与你的实体、服务、模型进行交互,以便更容易进行原型设计。
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"
}
评论
