@aws/dynamodb-data-mapper

中文文档
0.7.3发布于 2018/08/16Apache-2.0TypeScriptCommonJS近 30 天下载 8.6万

Amazon DynamoDB 基于计划的数据映射器

中文使用文档
文档目录14 节
  1. 开始
  2. 支助行动
  3. batchDelete
  4. batchGet
  5. batchPut
  6. batchWrite
  7. delete
  8. get
  9. put
  10. query
  11. scan
  12. parallelScan
  13. update
  14. executeUpdateExpression

亚马逊 DynamoDB 数据Mapper

Apache 2 License

这个图书馆提供 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 指导软件包 以创建条件表达式对象.

版本与发布记录

@aws/dynamodb-data-mapper 共发布 17 个版本,首次发布于 2017/11/21;过去 12 个月发布了 0 个版本。

版本发布日期距今
0.7.3latest2018/08/168 年前
0.7.22018/07/268 年前
0.7.12018/07/218 年前
0.7.02018/07/118 年前
0.6.12018/06/298 年前
0.6.02018/06/178 年前

关于 @aws/dynamodb-data-mapper 的常见问题

@aws/dynamodb-data-mapper 是什么?

Amazon DynamoDB 基于计划的数据映射器

如何安装 @aws/dynamodb-data-mapper?

在项目目录运行 npm install @aws/dynamodb-data-mapper,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:aws-sdk(^2.7.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@aws/dynamodb-data-mapper 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@aws/dynamodb-data-mapper 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@aws/dynamodb-data-mapper 可以商用吗?

@aws/dynamodb-data-mapper 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@aws/dynamodb-data-mapper 的下载量有多少?

根据 npm 官方下载统计,@aws/dynamodb-data-mapper 在 2026/10/08 – 2026/11/06 这 30 天内被下载 86,247 次,日均约 2,875 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@aws/dynamodb-data-mapper 还在维护吗?

最新版本 0.7.3 发布于 2018/08/16(8 年前);至今共发布 17 个版本,其中过去 12 个月发布了 0 个;首次发布于 2017/11/21。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。