如何在dynamodb中添加空或数据映射?

Nic*_*ick 9 amazon-dynamodb

我有这样的事情:

{
  Records:{}
}
Run Code Online (Sandbox Code Playgroud)

我只是想在这样的记录中添加数据:

{
  Id: 123,
  Records:{
    10001: { event : "item1" }
  }
}
Run Code Online (Sandbox Code Playgroud)

我的第一次尝试:

var params = {
    TableName : "Records",
    Key : { Id : 123 },
    UpdateExpression: 'set Record.#k1.event = :v1',
    ExpressionAttributeNames: { '#k1' :  10001},
    ExpressionAttributeValues: { ':v1' : 'item1' }
};
Run Code Online (Sandbox Code Playgroud)

因为Record.10001不存在,所以它给我错误:

The document path provided in the update expression is invalid for update
Run Code Online (Sandbox Code Playgroud)

"ADD"仅支持NUMBER和SET类型,因此它不适合我的情况.

我的第二次尝试(试图创建一张空地图第一次):

var params = {
    TableName : "Records",
    Key : { Id : 123 },
    UpdateExpression: 'set Record.#k1 = {}',
    ExpressionAttributeNames: { '#k1' :  10001},
};
Run Code Online (Sandbox Code Playgroud)

它失败了,因为我的语法可能不正确,我找不到如何为属性创建一个空映射.

所以我的问题是如何将结构化对象作为地图或空地图添加到现有项目,如上例所示?

我可以轻松地修改亚马逊DynamoDB数据管理页面中的数据,所以至少我知道有一种方法可以做到这一点.我只需要知道如何.

谢谢

Nic*_*ick 6

我以某种方式成功地做到了:

var params = {
    TableName: "Records",
    Key: { Id: 123 },
    UpdateExpression: 'set Records.#k1 = :v1',
    ExpressionAttributeNames: {'#k1': '10001',},
    ExpressionAttributeValues: {':v1': { event: 'Yay~' } }
};
Run Code Online (Sandbox Code Playgroud)

您可以选择使用

    UpdateExpression: 'set Records.#k1 = if_not_exists( Records.#k1, :v1)',
Run Code Online (Sandbox Code Playgroud)

避免覆盖现有记录。