2016-07-19 2 views
4

"제공된 키 요소가 스키마와 일치하지 않습니다"라는 오류가 발생합니다. uuid이 내 주 파티션 키입니다. version에 대한 기본 정렬 키도 있습니다. batchWrite (docs)을 사용하여 uuid의 모든 항목을 삭제할 수 있다고 생각했습니다. 다음과 같이DynamoDB를 사용하여 일괄 처리를 어떻게 삭제합니까?

내 ES6 코드는 다음과 같습니다

delete(uuid) { 
    const promise = new Promise(); 
    const params = { 
    RequestItems: { 
     [this.TABLE]: [ 
     { 
      DeleteRequest: { 
      Key: { uuid: uuid } 
      } 
     } 
     ] 
    } 
    }; 


    // this._client references the DocumentClient 
    this._client.batchWrite(params, function(err, data) { 
    if (err) { 
     // this gets hit with error 
     console.log(err); 
     return promise.reject(err); 
    } 

    console.log(result); 
    return promise.resolve(result); 
    }); 

    return promise; 
} 

이 기본입니다 키에 erroring 왜 확실하지. 나는 열쇠가 아닌 것으로 검색 할 때 다른 색인이 필요하다는 게시물을 보았습니다. 그러나 나는 그것이 여기있는 경우라고 생각하지 않는다.

+0

그것은 그 반대'uuid' 필드는 문자열로 설정하고 당신이 그것에게 번호를 부여하고, 또는 가능한가요? – mindoftea

+0

@mindoftea 좋은 추측이지만 문자열을 기대하는 필드에 긴 문자열을 전달하고 있습니다. 나는 편집증에 걸렸지 만'uuid'는 실수로 정의되지 않았지만 그럴 것 같지 않습니다 :)'{ "RequestItems": { "campaigns": [{ "DeleteRequest": { "Key": { "uuid": "2f114a47 -835e-4937-a0b6-675e0e15ab86 "}}}]}}' –

+0

우리 동쪽에서 일하고 있습니까? 난 실제로 발전기에서 이상한 서버 오류가 발생했기 때문에 실제로이 게시물에서 일어 났을 것입니다. 아마도 오늘은 망가 졌을 것입니다. – mindoftea

답변

4

배치 쓰기 삭제 요청 샘플은 다음과 같습니다. 이 코드는 테스트를 거쳤으며 잘 작동합니다. 요구 사항에 맞게이 코드를 변경하면 제대로 작동합니다.

테이블 정의 : -

가방 - 테이블 이름

가방 - 해시 키

'가방'테이블에 파티션 키

일괄 쓰기 코드 : -

var AWS = require("aws-sdk"); 

AWS.config.update({ 
    region : "us-west-2", 
    endpoint : "http://localhost:8000" 
}); 

var documentclient = new AWS.DynamoDB.DocumentClient(); 

var itemsArray = []; 

var item1 = { 
    DeleteRequest : { 
     Key : { 
      'bag' : 'b1'  
     } 
    } 
}; 

itemsArray.push(item1); 

var item2 = { 
    DeleteRequest : { 
     Key : { 
      'bag' : 'b2'  
     } 
    } 
}; 

itemsArray.push(item2); 

var params = { 
    RequestItems : { 
     'Bag' : itemsArray 
    } 
}; 
documentclient.batchWrite(params, function(err, data) { 
    if (err) { 
     console.log('Batch delete unsuccessful ...'); 
     console.log(err, err.stack); // an error occurred 
    } else { 
     console.log('Batch delete successful ...'); 
     console.log(data); // successful response 
    } 

}); 

출력 : -

Batch delete successful ... 
{ UnprocessedItems: {} } 
+0

어떻게 파티션 키가 전혀 없습니까? 테이블을 작성할 때 기본 키는 필수 필드입니다. 해시 키가 기본 키와 다른가요? 내 기본 키는 해시이므로 어쩌면 내가 한 키로 잘못 읽었을 수도 있습니다. –

+0

또한 올바른 키와 객체 배열을 가지고 있으므로 코드가 동일합니다. 각 항목에 새 항목을 추가하여 일괄 처리하는 것을 확인합니다. 추가 정렬 키를 전달하지 않아 DynamoDB가 실패합니까? 'uuid'를 지정하여 여러 항목을 삭제하려고합니다. 목적을 상실 할 수있는'version'을 지정하지 않아도됩니다. –

+0

아, 소트 키와 기본 키를 삭제할 수 있기를 원합니다. 내가 생각한 의미에서 배치가 아닙니다. :/ –

관련 문제