2016-07-18 4 views
3

iam, пытающийся обновить json array.i, имеет таблицу в dynamoDb.i, успешно вставленную json-данные в dynamo с использованием метода put.Невозможно обновить массив aws Dynamo

Partition ключ: _id, Тип: S

Это мои данные JSON сохраняются в базе данных.

{ 
    "_id": "001", 
    "email": "[email protected]", 
    "class": { 
     "student_list": [] 
    } 
} 

Но я наклоняю обновленный JSon массив student_list с помощью ключа электронной почты. я следующий код

var AWS = require("aws-sdk"); 
var docClient = new AWS.DynamoDB.DocumentClient(); 

var params = { 
    TableName: "testTable1", 
    Key: { 
     "email": "[email protected]", 
    }, 
    UpdateExpression: "set class.student_list = list_append (class.student_list, :studentEmail)", 
    ExpressionAttributeValues: { 
     ":studentEmail": "[email protected]" 
    }, 
    ReturnValues: "UPDATED_NEW" 
}; 

docClient.update(params, function (err, data) { 
    if (err) { 
     console.error("Unable to update item. Error JSON:", JSON.stringify(err, null, 2)); 
    } else { 
     console.log("UpdateItem succeeded:", JSON.stringify(data, null, 2)); 
    } 
}); 

Но я получил сообщение об ошибке, как этот

Unable to update item. Error JSON: { 
    "message": "Invalid UpdateExpression: Incorrect operand type for operator or function; operator or function: list_append, operand type: S", 
    "code": "ValidationException", 
    "time": "2016-07-18T14:31:44.978Z", 
    "requestId": "378NSB5RVB1TNI0PB1Q3OH67V3VV4KQNSO5AEMVJF66Q9ASUAAJG", 
    "statusCode": 400, 
    "retryable": false, 
    "retryDelay": 0 
} 

Какова реальная проблема, связанная с этим?

+0

что тип dynamodb данных атрибута «класс» и " student_list "? – notionquest

+0

"class" Тип: Карта, "student_list" Тип: Список. –

ответ

1

Из документов: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.Modifying.html

типа Операнд должен содержаться в списке.

«Новый элемент должен содержаться в списке, например, добавить 2 в список, операнд будет [2]»

+0

спасибо за ваш ответ. но мне нужно добавить list_list по строковым элементам. –

+0

Не можете ли вы преобразовать строку «[email protected]» в массив только этого элемента перед выполнением запроса? – Conti

+0

благодарит Конти, я просто меняю studentEmail из строки в список. Но появилось другое сообщение об ошибке «Предоставленный ключевой элемент не соответствует схеме». его рабочий тон, используя ключ как _id (ключ раздела) вместо ключа электронной почты. Но мне нужно обновить, используя электронную почту. –

Смежные вопросы