2016-07-19 10 views
4

Ich erhalte eine Fehlermeldung, dass "das angegebene Schlüsselelement nicht mit dem Schema übereinstimmt". uuid ist mein primärer Partitionsschlüssel. Ich habe auch einen primären Sortierschlüssel für version. Ich dachte, ich kann batchWrite (docs) verwenden, um alle Elemente mit demselben uuid zu löschen.Wie lösche ich im Batch mit DynamoDB?

Mein ES6 Code ist wie folgt:

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; 
} 

nicht sicher, warum es auf dem Schlüssel erroring, der die primäre ist. Ich habe Beiträge darüber gesehen, dass ich andere Indizes für Zeiten brauche, in denen ich nach etwas suche, das kein Schlüssel ist. Aber ich glaube nicht, dass das hier der Fall ist.

+0

Ist es möglich, dass die 'uuid' Feld als String eingestellt ist und es eine Nummer, oder umgekehrt sind zu geben? – mindoftea

+0

@mindoftea gut geraten, aber ich gebe eine lange Zeichenfolge in das Feld, das eine Zeichenfolge erwartet. Ich wurde paranoid, der 'Uuid' war aus Versehen undefiniert und scheint es nicht zu sein :)' {"RequestItems": {"campaigns": [{"DeleteRequest": {"Key": {"uuid": "2f114a47 -835e-4937-a0b6-675e0e15ab86 "}}}}}} –

+0

arbeitest du in us-east-1? Ich habe diesen Post tatsächlich passiert, weil ich immer seltsame Serverfehler vom Dynamo bekommen habe - vielleicht ist er heute kaputt. – mindoftea

Antwort

4

Hier ist die Batch-Schreib-Löschanforderung Beispiel. Dieser Code wurde getestet und funktioniert einwandfrei. Wenn Sie diesen Code für Ihre Anforderung ändern, sollte es funktionieren.

Tabelle Definition: -

Bag - Tabellenname

bag - Hash Key

Keine Partitionsschlüssel in der Tabelle 'Bag'

Batch schreiben Code: -

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 
    } 

}); 

Ausgang: -

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

Wie Hast du überhaupt keinen Partitionsschlüssel? Beim Erstellen einer Tabelle ist der Primärschlüssel ein erforderliches Feld. Ist der Hash-Schlüssel anders als der Primärschlüssel? Mein Primärschlüssel ist ein Hash, also könnte ich sie als ein und dasselbe falsch verstehen. –

+0

Es scheint auch, dass unser Code identisch ist, dass ich die richtigen Schlüssel und Array von Objekten habe. Ich sehe, dass Sie stapelweise arbeiten, indem Sie für jeden Artikel einen neuen Eintrag erstellen. Fällt DynamoDB aus, weil ich den zusätzlichen Sortierschlüssel nicht übergebe? Ich schaue, um mehrere Einträge zu löschen, indem ich die 'Uuid' spezifiziere, ohne' Version' zu spezifizieren, weil das den Zweck –

+0

besiegen würde Ah yeah es wünscht, dass der Sortierschlüssel und der Primärschlüssel löschen können. Es ist keine Partie in dem Sinne, wie ich dachte. :/ –

Verwandte Themen