繁体   English   中英

AWS Lambda:如何在 Dynamodb 中更新 map 中的项目

[英]AWS Lambda: How to update item in a map in Dynamodb

我想在 lambda function 中聚合期间在我的 Dynamodb 表中增加名为ProvinceDistributionMAP属性中的项目的值,基于用户的字段记录。

表 model:

type submissionsAggregate @model {
  id: String
  totalRecords: Int
  provinceDistribution: provinces
  status: employmentStatus
  females: Int
  males: Int
}
type provinces {
  Sichuan: Int
  Qinghai: Int
  Gansu: Int
  Heilongjiang: Int
  Yunnan: Int
  Hunan: Int
  Shaanxi: Int
  Hebei: Int
  ...
}

用户记录:

   {
     "Timestamp": {
        "S": "2016-11-18:12:09:36"
      },
      "province": {
        "S": "Sichuan"
      },
      "gender": {
        "S": "male"
      },
      "employmentStatus": {
        "S": "employed"
      }
   }

我提取了字段值并将其存储在ExpressionAttributeValues中,希望在更新期间创建指向 MAP( #province )中目标项目的路径,如下所示

const params = {
    ExpressionAttributeNames: {
      "#total": "totalRecords",
      // "#status": "status",
      "#males": "males",
      "#females": "females",
      "#select": "Sichuan",
      "#province": "provinceDistribution",
    },
    ExpressionAttributeValues: {
      ":inc": 1,
      // ":targetStatus": `#status.${employmentStatus}`,
      ":targetProvince": `#province.${province}`,
      ":maleIncrement": maleIncrement,
      ":femaleIncrement": femaleIncrement,
    },
    Key: {
      id: "statistics1",
    },
    ReturnValues: "ALL_NEW",
    TableName: process.env.TABLE_NAME,
    UpdateExpression:
      "set #province=:targetProvince + :inc, #total=#total+ :inc, #males =#males+:maleIncrement, #females=#females+ :femaleIncrement",
  };

然后我得到这个错误:

'无效的UpdateExpression:运算符或function的操作数类型不正确; 运算符或 function:+,操作数类型:S',

主要问题是知道如何动态遍历 Map。 说省分布.四川,其中“四川”是从用户记录中提取的省份,以便在 Map 中增加其值。

任何有关如何实现这一目标的建议将不胜感激。

您的问题set #province=:targetProvince +:inc 您正在尝试将数字与字符串连接,UpdateExpressions https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.UpdateExpressions.html不支持该字符串

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM