dynamodb 从 Nodejs 循环中更新插入

ize*_*god 2 node.js amazon-dynamodb dynamodb-queries

所以基本上我有一个 array( ) 并想从 a中features执行upsert操作。该数组看起来像这样:。现在这里更新按预期发生,但插入没有发生。dynamodbforEach-loopfeatures[{'feature': 'existing_feature', 'visibility': ['should_update']}, {'feature': 'new_feature', 'visibility': ['should_insert']} ]

update(table, params) {
const query = {
  ...params,
  TableName: this.tableName(table)
}
console.log('update-query', query)
return this._docClient.update(query).promise()


}

updateSupportTierDetails(features) {
console.log('inside updateSupportTierDetails')
const promises = []

features.forEach(element => {
  const params = {
    Key: {
      'feature': element.feature
    },
    UpdateExpression: 'set visibility = :visibility',
    ExpressionAttributeValues: {
      ':visibility': element.visibility
    },
    ReturnValues: "UPDATED_NEW"
  }
  console.log('updateSupportTierDetails params', params)
  const promise = this.update('features', params)
  console.log('promise', promise)
  promises.push(promise)
});

console.log('promises', promises)

return Promise.all([...promises])
.then(result => {
  console.log('result', result)
  if(result.count === 0) {
    console.log('updateSupportTierDetails: No Upsert Operation')
    return []
  }
  console.log('updateSupportTierDetails: Upsert Operation Success')
  return result
})


}
Run Code Online (Sandbox Code Playgroud)

rob*_*rus 5

如果不存在,DynamoDb put将插入新记录;如果存在,则更新现有记录(基于分区键)

https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html#put-property

但是,如果您要循环更新插入多个项目,请考虑使用批量写入。

https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html#batchWrite-property