Agregar elemento no existente a la matriz en DynamoDB

Estoy tratando de actualizar el atributo de elementos que es una lista de cadenas. ¿Puedo actualizar (agregar) el atributo solo si no existe? Tipo de list_append & if_not_exists.

var params = {…

UpdateExpression: 

‘SET friends = list_append (if_not_exists (friends,: empty_list),: new_friend)’,

 ExpressionAttributeValues:{ ":new_friend": [{"S":"Bobo"}], ":empty_list" :[] } }; 

Esto no está funcionando, ¿hay alguna manera? así que si Bobo aún no está en mi lista de “amigos”, lo agregará

Puede usar “no contiene” y “list_append” para su requerimiento.

El siguiente código inserta al nuevo amigo en la lista si el amigo NO está ya presente en la lista.

Si el amigo ya está presente en la lista, lanzará “error de solicitud condicional”.

Mensaje de error si la condición falla: –

 Unable to update item. Error JSON: { "message": "The conditional request failed", "code": "ConditionalCheckFailedException", "time": "2016-06-22T08:18:36.483Z", "requestId": "86805965-240b-43e0-8fdc-77fb9ae1b15c", "statusCode": 400, "retryable": false, "retryDelay": 0 } 

El siguiente código funciona bien. Se ha probado con éxito.

Ejemplo de código:

 var AWS = require("aws-sdk"); AWS.config.update({ region : "us-west-2", endpoint : "http://localhost:8000" }); var docClient = new AWS.DynamoDB.DocumentClient(); var table = "users"; var userid = 1; var friendId = ["f4"]; var friendIdStr = "f4"; //Add the new DOCUMENT TYPE attribute to the table var params = { TableName : table, Key: { "id" : userid }, "UpdateExpression": "set friends = list_append (friends, :friendId)", "ConditionExpression": "not contains (friends, :friendIdStr)", "ExpressionAttributeValues": { ":friendId": friendId, ":friendIdStr" : friendIdStr }, "ReturnValues" : "UPDATED_NEW" }; console.log("Updated an item..."); docClient.update(params, function(err, data) { if (err) { console.error("Unable to update item. Error JSON:", JSON.stringify(err, null, 2)); } else { console.log("Updated item:", JSON.stringify(data, null, 2)); } });