JavaScript 类型之间的DynamoDB.DocumentClient
自动编组和解组值是 DynamoDB 更具描述性的AttributeMap
类型。但是,当使用具有StringSet
属性的 Item 时,它似乎不会自动进行转换。
使用 向表添加StringSet
属性时DocumentClient
,我使用该createSet(...)
方法将数组转换为 Set。取回值时, 的倒数是createSet(...)
什么?直接访问 Set 的最佳做法是.values
什么?如果是这样,是否记录在某处?
这是添加具有StringSet
属性的项目的示例代码,然后检索该项目:
const docClient = new DocumentClient();
const TableName = "StringSets-Example";
const PK = "Names";
const Values = ["Peter", "Paul", "Mary"];
const putParams = {
TableName,
Item: {
PK,
names: docClient.createSet(Values)
}
}
await docClient.put(putParams).promise();
// ... some time later, I can retrieve the value with ...
const getParams = {
TableName,
Key: { PK }
}
const result = await docClient.get(getParams).promise();
有result.Item
一个Set
对象,而我希望它是我传入的同一个数组createSet(...)
。
如果有兴趣看到这个现场,这个 repo 有一个功能齐全的例子。 克隆它,npm install
然后运行index.js
,你会看到如下内容:
$ ./index.js
Running On: darwin 19.6.0
Node version: v12.20.0
AWS SDK version: 2.799.0
-------------------------
Creating table "StringSets-Example"
Waiting for "StringSets-Example" status to be "ACTIVE"
Table status is: CREATING
Table status is: ACTIVE
Put String Set "["Peter, "Paul, "Mary"]" into "StringSets-Example" with key "Names" and attribute "names"
Retrieved Item with key "Names" from "StringSets-Example"
The raw Item: {
PK: 'Names',
names: Set {
wrapperName: 'Set',
values: [ 'Mary', 'Paul', 'Peter' ],
type: 'String'
}
}
The raw Item.names.values: [ 'Mary', 'Paul', 'Peter' ]
-------------------------
Done. To clean up, run:
./src/deleteTable.js