2016-07-19 11 views
4

「提供されたキー要素がスキーマと一致しません」というエラーが表示されます。 uuidが私のプライマリパーティションキーです。 versionのプライマリソートキーもあります。私はbatchWritedocs)を使って、同じ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良い推測ですが、文字列が必要なフィールドに長い文字列を渡しています。私は誤って定義されていないが、それはそうではないようだ: '{" RequestItems ":{"キャンペーン ":[{" DeleteRequest ":{" Key ":{" uuid ":" 2f114a47 -835e-4937-a0b6-675e0e15ab86 "}}}]}}' –

+0

あなたは私たちの東1で働いていますか?私は実際にこの記事全体で起きました。なぜなら、私はダイナモから奇妙なサーバエラーを受け続けました。 – 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

ソートキーとプライマリキーを削除できるようにします。私が思った意味でバッチではありません。 :/ –

関連する問題