Dynamo 中的 JS 更新地图元素 table

JS Update Map element in Dynamo table

TL/DR: 如何在不修改 Dynamo 中的整个地图的情况下更新单个地图 key/value?

我在一个简单的 table 中有一个 Map。我正在尝试实施更新,但不确定如何引用 Map 对象的 key/value 对。这是我尝试过的方法,以及我的 table:

的屏幕截图

传递参数 updq(更新的问题)、updans(更新的答案)、ans(原始答案)、qq(原始问题)

var params = {
  TableName: TABLE_NAME,
  Key: { topic: topic },
  ExpressionAttributeNames: {
    "#qq": qq,
    "#updq": updq,
  },
  ExpressionAttributeValues: {
    ":ans": ans,
    ":updans": updans,
  },
};
if (!doUpdate) {
  //replace/create
  params["UpdateExpression"] = "SET questions.#qq = :ans"; //this works
} else {
    params["UpdateExpression"] = "SET questions.#updq = :updq, _____"; //<<<<<<<<<<THIS DOESNT
}

console.log(`writing params: `, params);
let res = await docClient.update(params).promise();

创建新问题: 问题地图已经存在,因此,SET questions.#qq = :ans 将在 MAP

中创建一个条目
  params.ExpressionAttributeNames = {
    "#qq": qq,
  };
  params.ExpressionAttributeValues = {
    ":ans": ans,
  };
  params.UpdateExpression = "SET questions.#qq = :ans";

为了更新现有问题,可能是问题本身而不仅仅是答案,因此,我们需要删除现有问题并创建一个新问题,因此,我们需要添加 REMOVE questions.#qq

  params.ExpressionAttributeNames = {
    "#qq": qq,
    "#updq": updq,
  };
  params.ExpressionAttributeValues = {
    ":updans": updans,
  };
  params.UpdateExpression =
    "REMOVE questions.#qq SET questions.#updq = :updans";
}