当前位置: 首页 > 知识库问答 >
问题:

Dynamodb UpdateExpression将新映射对象添加到现有项的列表中

郭易安
2023-03-14

我目前在dynamodb表中有一个列表属性:

 name: "Test User"
 recommendations: []

我想使用UpdateExpression向Recommensions属性添加新项

const params = {
    TableName: 'insiders',
    Key:{
      "uuid": event.uuid, // WHERE uuid is event.uuid
    },
    UpdateExpression: "SET #recommendations = :recommendation",
    ExpressionAttributeNames: {
      "#recommendations": "recommendations",
    },
    ExpressionAttributeValues: {
      ":recommendation": [{ 
        "uuid":  `ir_${uuidv4()}`, 
        "recommendation": event.recommendation
      }]
    },
    ReturnValues:"UPDATE_NEW"
  };

  dynamodb.update(params, function(err, data) { }

我设法将一个对象映射添加到推荐列表中,但当我想添加另一个对象映射时,它将替换推荐列表中的对象。

我还尝试使用外接程序UpdateExpression

const params = {
    TableName: 'insiders',
    Key:{
      "uuid": event.uuid,
    },
    UpdateExpression: "ADD #recommendations :recommendation",
    ExpressionAttributeNames: {
      "#recommendations": "recommendations",
    },
    ExpressionAttributeValues: {
      ":recommendation": [{ 
        "uuid":  `ir_${uuidv4()}`, 
        "recommendation": event.recommendation, 
      }]
    },
    ReturnValues:"ALL_NEW"
  };

   dynamodb.update(params, function(err, data) { }

但我得到了一个错误

"Invalid UpdateExpression: Incorrect operand type for operator or function; operator: ADD, operand type: LIST",

共有1个答案

温星华
2023-03-14

好的,我已经知道如何将一个对象添加到一个项目的现有映射属性中。我用了列表

这将向现有地图属性添加对象

const params = {
    TableName: 'insiders',
    Key:{
      "uuid": event.uuid,
    },
    UpdateExpression: "SET #attrName = list_append(#attrName, :attrValue)",
    ExpressionAttributeNames: {
      "#attrName": "recommendations",
    },
    ExpressionAttributeValues: {
      ":attrValue": [{ 
        "uuid":  `ir_${uuidv4()}`, 
        "recommendation": event.recommendation
      }]
    },
    ReturnValues:"ALL_NEW"
  };
 类似资料: