2016-05-12 12 views
5

Ho creato un attributo di tipo Set di stringhe. Quando creo creo l'oggetto e assegno un attributo di tipo SS, tutto funziona. Ma quando provo ad aggiornare questo attributo, il tipo di dati cambia in un elenco ("L").Come aggiornare un articolo in Dynamodb di tipo String Set (SS)?

provo questo:

qw = new AWS.DynamoDB.DocumentClient(); 

var params = { 
    TableName : "myTable", 
    Key: { 
    "id": somekey 
    }, 
    UpdateExpression: "set ssvar= :arrp", 
    ExpressionAttributeValues: { 
    ":arrp": [ "test", "test2" ] 
    } 
}; 

qw.update (etc.) 

Questo porta ad un cambiamento nel tipo di dati in DynamoDB e al posto di un insieme di stringa ottengo una lista:

"ssvar": { 
      "L": [ 
       { 
        "S": "test" 
       }, 
       { 
        "S": "test2" 
       } 
      ] 
     } 

Ho provato tutti i tipi di soluzioni come sotto ma il mio tipo di dati viene sempre modificato.

ExpressionAttributeValues: { 
    ":arrp": 
     "SS": [ "test", "test2" ] 
    } 

Come posso aggiornare un attributo di tipo set di stringhe?

+0

Ho lo stesso problema con Golang. Una porzione di stringhe viene convertita in dynamodb List su dynamodbattribute.Marshal. Come posso convertirlo in dynamodb Stringset? – Aprimit

risposta

1

Questo è un artefatto dell'utilizzo di DocumentClient - StringSet non è un tipo JSON.

Il DocumentClient converte un set di stringhe nel tipo JavaScript nativo dell'array: https://github.com/aws/aws-sdk-js/blob/master/lib/dynamodb/converter.js#L61. Quindi il client serializza l'array JavaScript nativo come tipo Elenco DynamoDB: https://github.com/aws/aws-sdk-js/blob/master/lib/dynamodb/converter.js#L12.

Se si desidera utilizzare il tipo StringSet, è possibile utilizzare l'API di basso livello: https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB.html

5

A partire da settembre 2015, c'è una funzione createSet nel DocumentClient che è possibile utilizzare per questo.

UPDATE - esempio aggiunto

ho modificato il codice di esempio per utilizzare questa funzione:

qw = new AWS.DynamoDB.DocumentClient(); 

var params = { 
    TableName : "myTable", 
    Key: { 
    "id": somekey 
    }, 
    UpdateExpression: "set ssvar= :arrp", 
    ExpressionAttributeValues: { 
    ":arrp": qw.createSet([ "test", "test2" ]) 
    } 
}; 

qw.update (etc.) 
+0

Sebbene questo collegamento possa rispondere alla domanda, è meglio includere qui le parti essenziali della risposta e fornire il link per riferimento. Le risposte di solo collegamento possono diventare non valide se la pagina collegata cambia. – ekad

+0

@ekad Grazie, buon consiglio. Aggiornato la risposta con un esempio :) – TorAL

+0

Proprio quello di cui avevo bisogno! – Julian

Problemi correlati