如何使用Node.js删除DynamoDB中的嵌套项?

huangapple go评论101阅读模式
英文:

How to delete nested item in DynamoDB using node?

问题

我正在尝试从 teams 对象中删除一个项目。

我的游戏表格如下所示

  1. {
  2. "gameId": "1", //PK
  3. "teams": {
  4. "1": {"id": "1", "teamName": "Blue"},
  5. "2": {"id": "2", "teamName": "Red"}
  6. }
  7. }

我的代码如下

  1. let team = {
  2. TableName: table,
  3. Key: {"id": event.pathParameters.gameId},
  4. ConditionExpression: "#t.#n = :val",
  5. ExpressionAttributeNames: {
  6. "#t": "teams",
  7. "#n": event.pathParameters.teamId
  8. },
  9. ExpressionAttributeValues: {
  10. ":val" : event.pathParameters.teamId
  11. }
  12. };
  13. try {
  14. await dbClient.delete(team).promise();
  15. } catch (err){
  16. return {error: err};
  17. }

但我收到以下错误

条件请求失败

我做错了什么???

英文:

I am trying to delete an item from teams object.

My game table looks like this

  1. {
  2. gameId: "1", //PK
  3. teams: {
  4. 1: {id: "1", teamName: "Blue"},
  5. 2: {id: "2", teamName: "Red"}
  6. }
  7. }

My code looks like this

  1. let team = {
  2. TableName: table,
  3. Key: {id: event.pathParameters.gameId},
  4. ConditionExpression: "#t.#n = :val",
  5. ExpressionAttributeNames: {
  6. "#t":"teams",
  7. "#n": event.pathParameters.teamId
  8. },
  9. ExpressionAttributeValues: {
  10. ":val" : event.pathParameters.teamId,
  11. "#n": event.pathParameters.teamId
  12. }
  13. };
  14. try {
  15. await dbClient.delete(team).promise();
  16. } catch (err){
  17. return {error: err};
  18. }

But i am getting following error

The conditional request failed

What am i doing wrong???

答案1

得分: 2

如果我理解正确,您正在尝试删除项目中的一个属性,而不是整个项目,所以您的基本概念在这里是错误的。

  1. let team = {
  2. TableName: table,
  3. Key: {id: event.pathParameters.gameId},
  4. UpdateExpression: "remove #t.#n",
  5. ExpressionAttributeNames: {
  6. "#t": "teams",
  7. "#n": event.pathParameters.teamId
  8. }
  9. };
  10. try {
  11. await dbClient.update(team).promise();
  12. } catch (err){
  13. return {error: err};
  14. }
英文:

If I understand correctly you're trying to delete an attribute within an item, and not a whole item, so your fundamentals are wrong here

  1. let team = {
  2. TableName: table,
  3. Key: {id: event.pathParameters.gameId},
  4. UpdateExpression: "remove #t.#n",
  5. ExpressionAttributeNames: {
  6. "#t":"teams",
  7. "#n": event.pathParameters.teamId
  8. }
  9. };
  10. try {
  11. await dbClient.update(team).promise();
  12. } catch (err){
  13. return {error: err};
  14. }

huangapple
  • 本文由 发表于 2023年7月12日 22:01:10
  • 转载请务必保留本文链接:https://go.coder-hub.com/76671427.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定