2015-11-14 2 views
1

Я пытаюсь выполнить одну из самых простых операций «Обновление» в списке динамо-db.Обновление набора в db Dynamo с использованием Node Js

Таблица Schema -

businessId : String, customers: StringSet, itemCode : NumberSet 

я запись вставляется через пут -

bussinessId = "sampleBusiness", cuatomers 0: "cust1", itemCode 0: 4554 

Я хочу, чтобы добавить больше деталей с помощью обновления, и вот что я попробовал -

var updateRequest = { 
    'TableName' : tableName, 
    'Key' : { 
     'businessId' : { 
      "S" : businessId 
     } 
    }, 
    'UpdateExpression' : "SET itemCode[2] =:attrValue",  
    'ExpressionAttributeValues' : { 
     ':attrValue' : { 
      "N" : "564564" 
     } 
    } 
}; 

Это дает мне ошибку -

Путь к документу содержится в документе недействителен

Я хотел, чтобы добавить новые записи таким образом, пытавшихся это также -

var sm = []; 
sm[0] = "56465"; 

//Add business to 
var updateRequest = { 
    'TableName' : tableName, 
    'Key' : { 
     'businessId' : { 
      "S" : businessId 
     } 
    }, 
    'UpdateExpression' : 'SET #attrName = list_append(#attrName, :attrValue)', 
    'ExpressionAttributeNames' : { 
     '#attrName' : 'itemCode' 
    }, 
    'ExpressionAttributeValues' : { 
     ':attrValue' : { 
      "NS" : sm 
     } 
    } 
    }; 

Это дает:

ValidationException: Invalid UpdateExpression: Неверный тип операнда для оператора или функции; оператор или функция: list_append, тип операнда: NS

также попытался это -

':attrValue' : { 
       "N" : "4564" 
      } 

Но ту же ошибку.

В соответствии с примером, приведенным в http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.Modifying.html, он добавляет новый элемент в обзорный список FiveStar. Имя атрибута выражения #pr: ProductReviews; значение атрибута :r является одноэлементным списком. Если в списке ранее были два элемента, [0] и [1], то новый элемент будет [2].

SET #pr.FiveStar = list_append(#pr.FiveStar, :r) 

, который говорит :r является список один элемент

я пропускаю некоторые вещи здесь. Запросите, если кто-нибудь может помочь. Поразило это надолго. Я просто хочу добавить элементы в набор в dynamo db, используя nodeJS.

ответ

0

Это выглядит следующим образом:

'ExpressionAttributeValues' : { 
    ':attrValue' : { 
     "NS" : sm 
    } 
} 

Должно быть так:

'ExpressionAttributeValues' : { 
    ':attrValue' : { 
     "S" : sm 
    } 
} 

Или вам нужно, чтобы бросить это значение sm[0] = "56465"; на номер Number("56465") и изменить тип :attrValue данные, "S" к "N". Зависит от того, как настроена ваша таблица.

Возможно также, что вы должны назначить :attrValue"S" : sm[0], потому что прямо сейчас вы передаете "S" целый массив.

-1

Я получил правильное решение

var item = {"endTime": "7pm", "imageName": "7abcd", "startTime": "7pm"}; 

dynamo.updateItem({ 
    TableName:'TableName', 
    Key:{"BucketName":"abcdefg" }, 
    UpdateExpression : "SET #attrName = list_append(#attrName, :attrValue)", 
    ExpressionAttributeNames : { 
     "#attrName" : "ImageLists" 
    }, 
    ExpressionAttributeValues : { 
     ':attrValue' : [item] 
    } 
},function(err, data) { 
    if (err) 
     console.log(err); 
    else 
     console.log(data) 
}); 
Смежные вопросы