Как я могу сделать updateItem во вложенном элементе в DynamodB? - PullRequest
1 голос
/ 27 апреля 2020

У меня есть и структура карты хранится в Dynamodb, и я хотел бы добавить еще один атрибут внутри школьного объекта

что-то вроде:

{
  name: 'Felipe'
  uid: 112233,
  data: {
    structure: {
      school: {
        name: 'beta'
      }
    }      
  }
}

ранее add_year не был частью структуры, поэтому эта часть является новой

school: {
  name: 'beta'
  add_year: '2020'
}

Как я могу это сделать?

Я пробовал следующие решения, без успех

(async ()=>{
  try {
    let teste =  await dynamoDb.updateItem({
      TableName: 'test',
      Key: { 
        uid: "112233"
      },
      UpdateExpression: "SET data.#structure.#school = list_append(#structure, :attrValue)",
      ExpressionAttributeNames: {
        "#data": "data",
        "#structure": "structure",
        "#school": "school",
      },
      ExpressionAttributeValues: {
        ":school":{  
          "add_year": 2020
        }
      },
      ReturnValues:"UPDATED_NEW "
    })
    console.log('update',teste)
  } catch (error) {
    console.log(error)
  }

Ответы [ 2 ]

0 голосов
/ 28 апреля 2020
const { DocumentClient } = require('aws-sdk/clients/dynamodb');

const documentClient = new DocumentClient({
  region: 'us-east-1',
});

try {
    let add_year= '2020'
    let teste = documentClient.update({
      TableName: 'test',
      Key: { 
        uid: "112233"
      },     
      UpdateExpression: `SET #data.structure.school=  :add_year`,
      ExpressionAttributeValues: {
        ':add_year':  add_year
      },
      ExpressionAttributeNames: {
        "#data": "data"   
      },
      ReturnValues:"ALL_NEW"
    }).promise()

    teste.then(t => console.log(t));   

  } catch (error) {
    console.log(error)
  }
0 голосов
/ 27 апреля 2020

Фелипе, вы видели AWS документацию об этой топике c?

Я думаю, этот код может работать для вас:

(async () => {
    try {
        var params = {
            TableName: 'test',
            Key: {
                "uid": "112233"
            },
            UpdateExpression: "SET data.structure.school.add_year = :year)",
            ExpressionAttributeValues: {
                ":add_year": 2020
            },
            ReturnValues: "UPDATED_NEW"
        }

        dynamoDb.update(params, (err, data) => {
            if (err) {
                console.error("Unable to update item. Error JSON:", JSON.stringify(err, null, 2));
            } else {
                console.log("UpdateItem succeeded:", JSON.stringify(data, null, 2));
            }
        })
    } catch (error) {
        console.log(error)
    }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...