2016-09-20 2 views
0

So habe ich mit Dynamodb in einer Nodejs Express-App gearbeitet und ich habe eine bestimmte Tabelle, die ein Feld hat, das nur leere Listen ist und ich eine Zeichenfolge an die Liste anhängen möchten .Hinzufügen einer Zeichenfolge zu einer Liste in einer Dynamodb Tabelle

Der Tabellenname ist „dev_entrants“ und hier ist ein Beispiel für die Tabelle:

---------------------------------------- 
primary Key   Sort Key  
eventID   | eventType | entrants 
---------------------------------------- 
Qual-919-w5wm1xhnw | Qual  | [] 

---------------------------------------- 

So erhalte ich eine Post-Anforderung und dann leiten Sie ihn durch ausdrückliche und es kommt zu einer Funktion, wo nach Typprüfungen tun und alles, was ich versuche, Sachen zu meinem Tisch hinzufügen mit:

import AWS from 'aws-sdk'; 

const docClient = new AWS.DynamoDB.DocumentClient({region: 'us-west-1'}); 

const db = { 
    docClient 
}; 

... 

const entrantsParams = { 
    'TableName' : 'dev_entrants', 
    'Key': { 
     'eventID' : 'Qual-919-w5wm1xhnw', 
    }, 
    'UpdateExpression' : "SET #attrName = list_append(#attrName, :attrValue)", 
    'ExpressionAttributeNames' : { 
     '#attrName' : 'entrants' 
    }, 
    'ExpressionAttributeValues' : { 
     ':attrValue' : ['joe'], 
    } 
    }; 

    const updateEntrantsPromise = db.docClient.update(entrantsParams).promise(); 

(Für die Zwecke dieses Beispiel habe ich ersetzt Variablen mit den Saiten sie repräsentieren)

Ich habe 6 Stunden oder so damit verbracht, verschiedene Dokumente durchzulesen, sowie einen Stack Overflow, der versucht, die Antwort zu finden.

Der aktuelle Fehler, den ich bekomme, ist das bereitgestellte Schlüsselelement stimmt nicht mit dem Schema überein. Wenn ich die Klammern um den attrValue entferne, bekomme ich den falschen Operandentyp. Ich weiß, dass der Schlüssel in der Tabelle existiert, da ich ihn von dort kopiert und eingefügt habe. Außerdem füge ich erfolgreich Dinge aus einer anderen Funktion in die Tabelle ein, damit meine Verbindung funktioniert. Kann mir bitte jemand helfen?

Antwort

2

Sie müssen das Objekt eventType in das Objekt Key aufnehmen, da Ihr Tabellenschema über einen Sortierschlüssel verfügt. Wenn Ihre Tabelle einen Sortier-/Partitionsschlüssel hat, müssen Sie ihn zusammen mit dem Primärschlüssel hinzufügen. Versuchen Sie es mit den folgenden:

const entrantsParams = { 
    'TableName' : 'dev_entrants', 
    'Key': { 
    'eventID' : 'Qual-919-w5wm1xhnw', 
    'eventType' : 'Qual' 
    }, 
    'UpdateExpression' : "SET #attrName = list_append(if_not_exists(#attrName, :empty_list), :attrValue)", 
    'ExpressionAttributeNames' : { 
    '#attrName' : 'entrants' 
    }, 
    'ExpressionAttributeValues' : { 
    ':attrValue' : ['joe'], 
    ':empty_list': [] 
    } 
}; 
+0

Vielen Dank! Ich habe die Dokumente durchgesehen und nie eine Notiz darüber gesehen. Das war wirklich großartig, weil es mein nächstes Problem bei einem anderen Update mit dem if_not_exists tatsächlich gelöst hat! – Pljeskavica

Verwandte Themen