2017-11-21 4 views
0

node.js를 통해 AWS DynamoDB 내의 기존 항목을 업데이트하고 싶습니다. 업데이트하려는 항목의 보조 색인 값만 있습니다. 기본 색인에 액세스 할 수 없습니다 ...GSI를 통해 DynamoDB 항목 업데이트

Id: primary index 
CallId: global secondary index 
CallStatus: normal field 

(키를 사용하지 않고) CallId를 사용하여 CallStatus를 업데이트하려고합니다.

내가 좋아하는 다른 접근 시도 : 항목에 대한

  • 검사를 한 후 GSI에 의해 인출 된 기본 키
  • 쿼리와 업데이트 한 다음
  • 조건부 갱신

를 업데이트하지만이의 없음 방법이 나를 위해 일했다. 내가 제대로 사용하지 않을 것이기 때문에 나는 생각한다. 어떤 도움을 주셔서 감사합니다 :-).

var docClient = new aws.DynamoDB.DocumentClient(); 
    var params = { 
    TableName: 'myTable', 
    FilterExpression: 'CallId = :c', 
    ExpressionAttributeValues: { 
     ':c': callSid 
    } 
    }; 

    docClient.scan(params, function (err, result) { 
    if (err) { 
     console.error("Unable to query item. Error JSON:", JSON.stringify(err)); 
    } else { 
     console.log(result); 

     // Update call status 
     var params = { 
     TableName: "myTable", 
     Key: { 
      "Id": result.Items[0].Id 
     }, 
     UpdateExpression: "set CallStatus = :s", 
     ExpressionAttributeValues: { 
      ":s": callStatus 
     }, 
     ReturnValues: "UPDATED_NEW" 
     }; 

     docClient.update(params, function (err, data) { 
     if (err) { 
      console.error("Unable to update item. Error JSON:", JSON.stringify(err)); 
     } else { 
      console.log("Update item succeeded:", JSON.stringify(data)); 
     } 
     }); 
    } 
    }); 
+0

어떤 오류가 있습니까? '핵심 : 기본 색인'은 무엇을 의미합니까? 파티션 키 속성 이름은 "Key"또는 "Id"입니까? – notionquest

+0

@notionquest 안타깝게도 오류 메시지가 없습니다. 기본 키의 이름은 Id입니다. 위의 질문에서 변경했습니다. – Tobias

답변

0

좋아, I've 발견 내 오류 : "검사 및 업데이트"방법

코드 예제. 업데이트 이후의 호출은 위 ... 따라서 DynamoDB의의 비동기 업데이트가 무슨 일이 생긴 적이는 AWS 람다 세션을 종료 발생해야 다음과 같이

지금 작업 코드는 읽

var params = { 
    TableName: 'table', 
    IndexName: 'CallId-index', 
    KeyConditionExpression: 'CallId = :id', 
    ExpressionAttributeValues: { 
     ':id': callSid 
    } 
    }; 

    docClient.query(params, function (err, result) { 
    if (err) { 
     console.log("Unable to query item. Error JSON:", JSON.stringify(err)); 
    } else { 
     var params = { 
     TableName: "table", 
     Key: { 
      "Id": result.Items[0].Id 
     }, 
     UpdateExpression: "set CallStatus = :s", 
     ExpressionAttributeValues: { 
      ":s": callStatus 
     }, 
     ReturnValues: "UPDATED_NEW" 
     }; 
     docClient.update(params, function (err, data) { 
     if (err) { 
      console.log("Unable to update item. Error JSON:", JSON.stringify(err)); 
     } else { 
      // do sth. else 
     } 
     }); 
    } 
    });