带和/或不带类型的 AWS DynamoDB 数据?
Posted
技术标签:
【中文标题】带和/或不带类型的 AWS DynamoDB 数据?【英文标题】:AWS DynamoDB data with and/or without types? 【发布时间】:2018-05-20 10:20:00 【问题描述】:我正在使用 aws-sdk
让 NodeJS 与 DynamoDB 表进行交互。这是我第一次看到 DynamoDB。
当使用getItem()
或updateItem()
之类的调用时,数据结构包括类型,如下所示:
'a': S: 'My string'
有没有办法在没有类型的情况下传递和接收这些对象..?所以...
'a': 'My string'
或者,任何已经编写的帮助函数将对象转换为这种格式..?
const data = dbToObj( 'a': S: 'My string' )
// 'a': 'My string'
所以我可以在填充调用参数时转换为它,并在接收数据时从它转换。
尽量避免访问我的数据,例如:
const myData = data.Item.something.M.somethinElse.M.qwerty.S
我知道我可以自己写一些东西,只是想知道是否有人知道已经可用的功能/选项可以做到这一点。我找不到。
【问题讨论】:
【参考方案1】:找到这个:
https://github.com/kayomarz/dynamodb-data-types https://www.npmjs.com/package/dynamodb-data-types正是我想要的。
安装:npm i dynamodb-data-types
提供wrap( 'a': 'My string' )
和unwrap( 'a': S: 'My string' )
方法来执行与普通对象的转换。
更新
我现在还发现了这个:AWS.DynamoDB.DocumentClient
,它是 aws-sdk
的一部分。
文档客户端通过抽象出属性值的概念来简化对 Amazon DynamoDB 中项目的处理。这种抽象对作为输入参数提供的原生 javascript 类型进行注释,并将带注释的响应数据转换为原生 JavaScript 类型。
更新 2
亚马逊正在他们的awslabs
github 页面下进行这项工作:
Amazon DynamoDB Automarshaller
此库提供了一个 Marshaller 类,可将原生 JavaScript 值转换为 DynamoDB AttributeValues,然后再转换回来。它旨在与 ES6 功能(如集合、映射和可迭代对象)一起使用,并且可以配置为支持仅由 JavaScript(例如空二进制缓冲区)或 Amazon DynamoDB(例如任意大小的数字)支持的数据类型,且折衷最少。
这是他们DynamoDB DataMapper For JavaScript 包的一部分。
【讨论】:
虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review 我总体上同意并且我已经更新了我的答案。但是,在这种特定情况下,我所做的只是重复dynamodb-data-types
提供的方法调用,因此它们可能会像链接一样发生变化。我没有任何代码可以分享,不是dynamodb-data-types
代码,因为我的问题的答案是直接使用这个库。有道理..?不过,我似乎已经被否决了! :-(【参考方案2】:
我们在生产应用程序中使用带有 typescript 的 dynamo-easy。 (直接来自浏览器或内部 Lambda 函数)
它提供了从 JS 到 DynamoDB 类型的映射,还提供了一些不错的请求 API 抽象。
import Model, PartitionKey, DynamoStore from '@shiftcoders/dynamo-easy'
@Model()
export class Person
@PartitionKey()
id: string
name: string
yearOfBirth: number
const personStore = new DynamoStore(Person)
personStore
.scan()
.whereAttribute('yearOfBirth').equals(1958)
.exec()
.then(res => console.log('ALL items with yearOfBirth == 1958', res))
全面披露:我是图书馆的作者之一
【讨论】:
【参考方案3】:Dynogels 提供了一种更简洁的处理方式,无需担心类型。 我们在生产中使用它并且没有任何问题。
https://github.com/clarkie/dynogels
Account.create(email: 'foo@example.com', name: 'Foo Bar', age: 21, function (err, acc)
console.log('created account in DynamoDB', acc.get('email'));
);
它是 dynamodb 的 ODM(对象数据映射器)。
希望对你有帮助。
【讨论】:
【参考方案4】:Dynamoose 是另一种建模工具,可以抽象出更多无关代码。 github 是here。我认为它建立在 AWS 文档客户端之上,虽然我没有做太多的挖掘工作。
【讨论】:
以上是关于带和/或不带类型的 AWS DynamoDB 数据?的主要内容,如果未能解决你的问题,请参考以下文章