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" }
评论