亚马逊 DynamoDB 数据Mapper
这个图书馆提供 DataMapper 允许简单互操作的类
介于您的应用程序域类和在亚马逊的持久形式之间
迪纳摩DB. 电源 @aws/dynamodb-data-marshaller 财务报告和审定财务报表
@aws/dynamodb-expressions 软件包,使用 DataMapper 让您定义每个
对象持续显示一次,然后加载、保存、扫描和查询
表格使用您的应用程序域的词汇,而不是其
在迪纳摩开发银行的代表.
开始
用来使用 DataMapper 带有给定的 JavaScript 类,您需要添加一个
组合属性到您想要映射的类的原型
迪纳摩DB桌. 具体地说,您需要提供一个计划以及名称:
该表:
import {DynamoDbSchema, DynamoDbTable} from '@aws/dynamodb-data-mapper';
class MyDomainModel {
// declare methods and properties as normal
}
Object.defineProperties(MyDomainModel.prototype, {
[DynamoDbTable]: {
value: 'MyTable'
},
[DynamoDbSchema]: {
value: {
id: {
type: 'String',
keyType: 'HASH'
},
foo: {type: 'String'},
bar: {
type: 'Set',
memberType: 'String',
},
baz: {
type: 'Tuple',
members: [
{type: 'Boolean'},
{type: 'String'},
],
},
},
},
});
可直接在图上宣布图和表名称为财产存取人 分类,如果数值应动态确定:
import {DynamoDbTable} from '@aws/dynamodb-data-mapper';
class MyOtherDomainClass {
id: number;
get [DynamoDbTable]() {
return this.id % 2 === 0 ? 'evens' : 'odds';
}
}
下一个,创建实例 DataMapper 并使用 MyDomainClass 构造器
上面定义的用于保存并装入来自 DynatomDB 的对象:
import {
DataMapper,
DynamoDbSchema,
DynamoDbTable,
} from '@aws/dynamodb-data-mapper';
import DynamoDB = require('aws-sdk/clients/dynamodb');
const client = new DynamoDB({region: 'us-west-2'});
const mapper = new DataMapper({client});
class MyDomainModel {
id: string;
foo?: string;
bar?: Set<string>;
baz?: [boolean, string];
}
Object.defineProperties(MyDomainModel.prototype, {
[DynamoDbTable]: {
value: 'MyTable'
},
[DynamoDbSchema]: {
value: {
id: {
type: 'String',
keyType: 'HASH'
},
foo: {type: 'String'},
bar: {
type: 'Set',
memberType: 'String',
},
baz: {
type: 'Tuple',
members: [
{type: 'Boolean'},
{type: 'String'},
],
},
},
},
});
// delete an object
const toDelete = new MyDomainModel();
toDelete.id = 'DELETE_ME';
mapper.delete(toDelete);
// if that's too verbose, you can write the above as a single expression with
// Object.assign:
mapper.delete(Object.assign(new MyDomainModel(), {id: 'DELETE_ME'}));
// fetch an object
const toGet = new MyDomainModel();
toGet.id = 'ID_TO_FETCH';
const fetched = await mapper.get(toGet);
// this should return a rejected promise, as it's fetching an object that does
// not exist
mapper.get(toDelete)
.catch(err => console.log('I expected this to happen'));
// put something new into the database
const toPut = new MyDomainModel();
toPut.id = 'NEW_RECORD';
toPut.foo = 'bar';
toPut.bar = new Set<string>(['fizz', 'buzz', 'pop']);
toPut.baz = [true, 'quux'];
mapper.put(toPut).then((persisted: MyDomainModel) => {
// now change the record a bit
const toUpdate = new MyDomainModel();
toUpdate.id = persisted.id;
toUpdate.baz = [false, 'beep'];
return mapper.update(toUpdate, {onMissing: 'skip'});
});
支助行动
batchDelete
删除一个或多个表格中25个或25个以下的任何项目 页:1 未处理的删除在指数递增后被重审 以表格为基础的备份延迟.
返回已删除项目的同步可移动性( 删除的项目为
当删除已被DynamotB接受时生成). 结果可能是
使用量a for-await-of 循环。 如果您正在使用类型脚本, 您需要
包括 esnext.asynciterable 在你身边 lib 声明(以及授权)
downlevelIteration 如果目标为ES5或更低。 请参考 类型脚本
发布注释
更多信息.
需要一个参数 :
- 要删除的项目的可移动( 同步或同步) 。 每个项目都必须
成为可透过地产访问表格名称的类的例子
与
DynamoDbTable符号和图案可以通过 与DynamoDbSchema符号.
batchGet
从一个或多个表格中从100个或以下批次中获取任何项目 页:1 未处理的读取在指数增长后重新测试 以表格为基础的备份延迟.
需要两个参数:
-
要获取的项目的可流动( 同步或同步) 。 每个项目必须是 通过属性访问表名的类 与
DynamoDbTable符号和图案可以通过 与DynamoDbSchema符号. -
(备选) 指定以下任一选项的对象:
-
readConsistency- 指定'strong'执行一贯的 读取。 指定'eventual'(默认)最终执行 一致读取. -
perTableOptions- 一个按键为表格名称和值的对象 是指定下列任一选项的对象:-
readConsistency- 指定'strong'强力执行 一致读取。 指定'eventual'(默认)履行 最终一致读取. -
projection- 一个投影表达式,指示 DynamoDB 返回 a 获取项目属性的子集。 请参看 联合国@aws/dynamodb-expressions软件包 关于创建投影表达式对象的指导. -
projectionSchema- 绘制所供应的地图时所用的计划projection选项.只有当批次包含来自 映射到 不变 表格使用 不同 属性名称,以代表相同的 DynatomDB 属性.
如果未提供,则与第一个项目有关的计划 与某一表格相联的表格将取而代之.
-
-
batchPut
在25个或25个以下项目的批次中,将任何数量的项目放在一个或多个表格中. 未处理的插座在逆向延迟指数上升后重新测试 以表方式适用.
返回已投放的可同步项目(产出项目)
被DynamoDB接受时 其结果可以用
for-await-of 循环。 如果您正在使用类型脚本, 您需要包含
esnext.asynciterable 在你身边 lib 声明(以及授权)
downlevelIteration 如果目标为ES5或更低。 请参考 类型脚本
发布注释
更多信息.
需要一个参数 :
- 可移动(同步或同步)的项目。 每个项目必须是
通过属性访问表名的类
与
DynamoDbTable符号和图案可以通过 与DynamoDbSchema符号.
batchWrite
在25个批次中,将任何数量的项目放在一个或多个表格中,或 东西少了 未处理的书写在指数化后被重审 增加每表适用的后退延迟.
返回字符串“ put” QQ“ delete” 和项目在上方的同位素
已执行指定的写出动作。 其结果可以用
(单位:千美元) for-await-of 循环。 如果您正在使用类型脚本, 您需要包含
esnext.asynciterable 在你身边 lib 声明(以及授权)
downlevelIteration 如果目标为ES5或更低。 请参考 类型脚本
发布注释
更多信息.
需要一个参数 :
- 串起的可移动( 同步或同步) 二联体
“ put ” 和用于执行指定写动作的项目 .
每个项目必须是一个有表格名称的类的例子,可以通过
与
DynamoDbTable符号和可访问的计划 通过与该财产有关的财产DynamoDbSchema符号.
delete
从 DynamoDB 表格中删除项目。 需要两个参数:
-
拟删除的项目 。 一定是一个有表格名的类的例子 可通过与该财产相关的财产获取
DynamoDbTable符号和 a 计划可通过下列财产获取:DynamoDbSchema符号. -
(备选) 指定以下任一选项的对象:
-
condition- 条件表达,其主张必须满足于 命令执行删除操作。 请参看 联合国@aws/dynamodb-expressions指导软件包 以创建条件表达式对象. -
returnValues- 指定'ALL_OLD'将删除的项目返回到 当删除操作完成时,您会看到. -
skipVersionCheck- 是否放弃创建条件表达式 根据定义versionAttribute在计划.
-
get
从 DynamoDB 表格获取项目 。 如果没有带指定密钥的项目 找到后, 返回的诺言将因错误被拒绝 。 需要两个 参数 :
-
取来之物. 一定是一个有表格名的类的例子 可通过与该财产相关的财产获取
DynamoDbTable符号和 a 计划可通过下列财产获取:DynamoDbSchema符号.提供的物品 没有 更新。 相反,一个新的项目是: 与DynamomoDB表格数据相同的类将返回.
-
(备选) 指定以下任一选项的对象:
-
readConsistency- 指定'strong'执行一贯的 读取。 指定'eventual'(默认)最终执行 一致读取. -
projection- 一个投影表达式,指示 DynamoDB 返回 a 获取项目属性的子集。 请参看 联合国@aws/dynamodb-expressions指导软件包 用于创建投影表达式对象.
-
put
将项目插入到 DynamomDB 表格。 需要两个参数:
-
待插入的项目。 一定是一个有表格名的类的例子 可通过与该财产相关的财产获取
DynamoDbTable符号和 a 计划可通过下列财产获取:DynamoDbSchema符号. -
(备选) 指定以下任一选项的对象:
-
condition- 条件表达,其主张必须满足于 命令执行放置操作。 请参看 联合国@aws/dynamodb-expressions指导软件包 以创建条件表达式对象. -
returnValues- 指定'ALL_OLD'以覆盖项目(如果 当操作完成后. -
skipVersionCheck- 是否放弃创建条件表达式 根据定义versionAttribute在计划.
-
query
根据主键从表格或索引中获取多个值 属性。 查询必须针对单个分区密钥值, 但可能读取 多个有不同范围密钥的项目.
这种方法作为同步执行器执行,结果可以被消耗
带有 for-await-of 循环。 如果您正在使用类型脚本, 您需要
包含 esnext.asynciterable 在你身边 lib 声明(以及授权)
downlevelIteration 如果目标为ES5或更低。 请参考 类型脚本
发布注释
更多信息.
需要三个参数:
-
用于操作返回的任何结果的构造器函数 . 必须有原型,通过确认的属性可访问表格名称 与
DynamoDbTable符号和通过属性可访问的计划 与DynamoDbSchema符号. -
指定要由 查询操作。 您可以提供匹配到 值必须相等,匹配散列键到
ConditionExpressionPredicates,或完全构成ConditionExpression。 。 。 . 如果提供散列,它可能包含条件表达的混合物 上游和精确值匹配:import {between} from '@aws/dynamodb-expressions'; const keyCondition = { partitionKey: 'foo', rangeKey: between(10, 99), };
The key condition must target a single value for the partition key.
Please refer to the documentation for the `@aws/dynamodb-expressions`
package for guidance on creating condition expression objects.
-
(备选) 指定以下任一选项的对象:
-
filter- DynamomDB 在查询后应用的条件表达式 操作,但在数据返回之前。 非项目 满足filter标准不返回.您无法根据分区键或排序定义过滤表达式 键.
请参看文件E/CN.4/Sub.2/2000/L.61
@aws/dynamodb-expressions关于创建条件表达式对象的指针软件包. -
indexName- 执行此查询的索引名称. 如果没有指定,则将对照基准表执行查询. -
limit- 返回物品的最大数量. -
pageSize- 归还物品的最大数量 每页结果。 。 。 . -
projection- 一个投影表达式,指示 DynamoDB 返回 a 任何已获取项目属性的子集。 请参看 联合国@aws/dynamodb-expressions指导软件包 用于创建投影表达式对象. -
readConsistency- 指定'strong'执行一贯的 读取。 指定'eventual'(默认)最终执行 一致读取. -
scanIndexForward- 指定索引倒转顺序: 如果真是这样的话 转弯按上升顺序进行;如果错误,转弯是 按降序进行. -
startKey- 第一项行动的主要关键 评估.
-
查询元数据
路人回来了 query 将跟踪项目数量
和通过委员会 count 财务报告和审定财务报表 scannedCount 属性 :
const iterator = mapper.query(
MyClass,
{partitionKey: 'foo', rangeKey: between(0, 10)}
);
for await (const record of iterator) {
console.log(record, iterator.count, iterator.scannedCount);
}
倾斜
如果您想要执行一个可重复的查询, 您可以使用 .pages() 方法
移动器返回 query 以访问内在的受孕者。 这个
平生器与活取器的不同之处在于 它产生出数组无相
记录和记录 lastEvaluatedKey 可提供给新的
呼叫 mapper.query 以稍后或单独程序恢复查询:
const paginator = mapper.query(
MyClass,
{partitionKey: 'foo', rangeKey: between(0, 10)},
{
// automatically stop after 25 items or the entire result set has been
// fetched, whichever is smaller
limit: 25
}
).pages();
for await (const page of paginator) {
console.log(
paginator.count,
paginator.scannedCount,
paginator.lastEvaluatedKey
);
}
const newPaginator = mapper.query(
MyClass,
{partitionKey: 'foo', rangeKey: between(0, 10)},
{
// start this new paginator where the previous one stopped
startKey: paginator.lastEvaluatedKey
}
).pages();
scan
检索表格或索引中的所有值.
这种方法作为同步执行器执行,结果可以被消耗
带有 for-await-of 循环。 如果您正在使用类型脚本, 您需要
包含 esnext.asynciterable 在你身边 lib 声明(以及授权)
downlevelIteration 如果目标为ES5或更低。 请参考 类型脚本
发布注释
更多信息.
需要两个参数:
-
用于操作返回的任何结果的构造器函数 . 必须有原型,通过确认的属性可访问表格名称 与
DynamoDbTable符号和通过属性可访问的计划 与DynamoDbSchema符号. -
(备选) 指定以下任一选项的对象:
-
filter- 扫描后DynamotB应用的条件表达式 操作,但在数据返回之前。 非项目 满足filter标准不返回.您无法根据分区键或排序定义过滤表达式 键.
请参看文件E/CN.4/Sub.2/2000/L.61
@aws/dynamodb-expressions关于创建条件表达式对象的指针软件包. -
indexName- 执行此查询的索引名称. 如果没有指定,则将对照基准表执行查询. -
limit- 返回物品的最大数量. -
pageSize- 归还物品的最大数量 每页结果。 。 。 . -
projection- 一个投影表达式,指示 DynamoDB 返回 a 任何已获取项目属性的子集。 请参看 联合国@aws/dynamodb-expressions指导软件包 用于创建投影表达式对象. -
readConsistency- 指定'strong'执行一贯的 读取。 指定'eventual'(默认)最终执行 一致读取. -
segment- 此段的标识符( 如果此扫描是) 作为平行扫描操作的一部分进行). -
startKey- 第一项行动的主要关键 评估. -
totalSegments- 扫描的片段数 分割( 如果此扫描作为平行扫描的一部分进行) 操作).
-
扫描元数据
路人回来了 scan 将跟踪项目数量
和通过委员会 count 财务报告和审定财务报表 scannedCount 属性 :
const iterator = mapper.scan(MyClass);
for await (const record of iterator) {
console.log(record, iterator.count, iterator.scannedCount);
}
倾斜
如果想要进行可重复的扫描,可以使用 .pages() 方法
移动器返回 scan 以访问内在的受孕者。 这个
平生器与活取器的不同之处在于 它产生出数组无相
记录和记录 lastEvaluatedKey 可提供给新的
呼叫 mapper.scan 稍后或另作一个过程恢复扫描:
const paginator = mapper.scan(
MyClass,
{
// automatically stop after 25 items or the entire result set has been
// fetched, whichever is smaller
limit: 25
}
).pages();
for await (const page of paginator) {
console.log(
paginator.count,
paginator.scannedCount,
paginator.lastEvaluatedKey
);
}
const newPaginator = mapper.scan(
MyClass,
{
// start this new paginator where the previous one stopped
startKey: paginator.lastEvaluatedKey
}
).pages();
parallelScan
通过将表格分为块来获取表格中的所有值,所有 它们平行扫描.
这种方法作为同步执行器执行,结果可以被消耗
带有 for-await-of 循环。 如果您正在使用类型脚本, 您需要
包含 esnext.asynciterable 在你身边 lib 声明(以及授权)
downlevelIteration 如果目标为ES5或更低。 请参考 类型脚本
发布注释
更多信息.
需要三个参数:
-
用于操作返回的任何结果的构造器 。 一定有个 使用表格名称的原型,可通过与表格名称相关的属性访问
DynamoDbTable符号和计划,可通过识别属性访问 与DynamoDbSchema符号. -
用来扫描表格的平行工人总数.
-
(备选) 指定以下任一选项的对象:
-
filter- 扫描后DynamotB应用的条件表达式 操作,但在数据返回之前。 非项目 满足filter标准不返回.您无法根据分区键或排序定义过滤表达式 键.
请参看文件E/CN.4/Sub.2/2000/L.61
@aws/dynamodb-expressions关于创建条件表达式对象的指针软件包. -
indexName- 执行此查询的索引名称. 如果没有指定,则将对照基准表执行查询. -
pageSize- 归还物品的最大数量 每页结果。 。 。 . -
projection- 一个投影表达式,指示 DynamoDB 返回 a 任何已获取项目属性的子集。 请参看 联合国@aws/dynamodb-expressions指导软件包 用于创建投影表达式对象. -
readConsistency- 指定'strong'执行一贯的 读取。 指定'eventual'(默认)最终执行 一致读取. -
startKey- 第一项行动的主要关键 评估.
-
扫描元数据
路人回来了 parallelScan 将跟踪项目数量
和通过委员会 count 财务报告和审定财务报表 scannedCount
属性 :
const iterator = mapper.parallelScan(MyClass, 4);
for await (const record of iterator) {
console.log(record, iterator.count, iterator.scannedCount);
}
倾斜
如果你想进行可重复的平行扫描,可以使用 .pages()
乘车返回的方法 parallelScan 访问基础
彼金刚者. 活化器与活化器的不同之处在于 它产生数组
未经核实的记录和记录 scanState 可提供的财产
新呼吁 mapper.parallelScan 稍后或单独恢复扫描
进程 :
const paginator = mapper.parallelScan(
MyClass,
4
).pages();
for await (const page of paginator) {
console.log(
paginator.count,
paginator.scannedCount,
paginator.lastEvaluatedKey
);
break;
}
const newPaginator = mapper.parallelScan(
MyClass,
4,
{
// start this new paginator where the previous one stopped
scanState: paginator.scanState
}
).pages();
update
在 DynamoDB 表格中更新项目。 将留下未定义的属性 计划就绪.
需要两个参数:
-
具有理想财产状态的物品. 一定是个班级 表格名称可通过与该表格相关的属性访问
DynamoDbTable符号和图案,可通过与该表所示的属性连接DynamoDbSchema符号. -
(备选) 指定以下任一选项的对象:
-
condition- 条件表达,其主张必须满足于 命令执行更新操作。 请参看 联合国@aws/dynamodb-expressions指导软件包 以创建条件表达式对象. -
onMissing- 指定'remove'(缺省)处理无 提供的数值item作为将财产从 在DynamoDB的纪录。 指定'skip'只更新属性 中定义item。 。 。 . -
skipVersionCheck- 是否放弃创建条件表达式 根据定义versionAttribute在计划.
-
executeUpdateExpression
执行自定义更新表达式。 这个方法会 没有 自动 应用版本检查,因为正在更新对象的当前状态不是 已经知道.
需要四个参数:
-
要执行的表达式 。 请参看文件E/CN.4/Sub.2/2000/L.61
@aws/dynamodb-expressions用于创建更新指南的软件包 表达式对象. -
正在更新的项目密钥 .
-
该类的构造器映射到该表达式的表格中 应该运行。 必须有原型,通过一个 与
DynamoDbTable符号和可访问的计划 通过与该财产有关的财产DynamoDbSchema符号. -
(备选) 指定以下任一选项的对象:
condition- 条件表达,其主张必须满足于 命令执行更新操作。 请参看 联合国@aws/dynamodb-expressions指导软件包 以创建条件表达式对象.