DynamodB upsert из цикла в nodejs - PullRequest
       18

DynamodB upsert из цикла в nodejs

0 голосов
/ 01 октября 2019

Так что в основном у меня есть массив (features) и я хочу выполнить upsert операцию в dynamodb из forEach-loop. массив features выглядит следующим образом: [{'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
})


}

1 Ответ

0 голосов
/ 01 октября 2019

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

...