如何使用文档客户端修改dynamodb中嵌入式列表中的元素

Jim*_*Jim 16 javascript amazon-dynamodb

我有一个DynamoDB表,其中表中的每个项都有一个注释数组作为属性.我的架构看起来像这样:

{
  "id": "abc",
  "name": "This is an item"
  "comments": [
    "commentId": "abcdefg",
    "commentAuthor": "Alice",
    "commentDetails": "This item is my favourite!"
  ]
}
Run Code Online (Sandbox Code Playgroud)

我希望能够通过它编辑单个注释commentId,但是不清楚如何为此更新编写DynamoDB表达式(我正在使用DocumentClient).

我们如何在Dynamo中更新嵌入式阵列中的条目?是否可以通过数组索引或查询表达式进行更新?

sau*_*dav 7

我认为应该对您的数据模型进行一些修改.您应该使用dynamodb map,只需将您的commentId作为访问每条评论的关键字

 {
  "id": "abc",
  "name": "This is an item"
  "comments": {
    "abcdefg":{
      "commentAuthor": "Alice",
      "commentDetails": "This item is my favourite!"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

然后查询看起来像这样,你必须知道两件事来更新评论1是项目ID,2是评论ID

var params = {
  TableName: Tablename,
  Key: {id: "abc"},
  UpdateExpression:"set comments.#abcdefg.commentDetails=:val1",
  ExpressionAttributeNames: {
    "#abcdefg":"abcdefg"
  },
  ExpressionAttributeValues:{
    ":val1":"New comment text"
  }
}

 db.update(param,callback);
Run Code Online (Sandbox Code Playgroud)

请让我知道并原谅我,解释你的问题,如果我误解,因为我没有足够的积分来澄清我的评论疑虑.

  • AFAIK如果你想为数组而不是映射做,你必须下拉整个数组,进行你想要的更改,并用新版本替换数组.从数据库设计的角度来看,如果你遇到Dynamo,假设一个关系,你只需将comment_id存储在一个数组中并将注释存储在自己的表中就可能更有意义了.然后在你的代码中将两者拼接在一起,然后发送给客户端. (2认同)