2015-06-02 15 views
8

Tôi đã cố gắng tìm ra cách cập nhật một mục trong dynamoDB nhưng chưa có thành công nào.không thể cập nhật mục trong DynamoDB

Tôi biết cách thêm và mục và xóa mục nhưng không cập nhật.

Đây là mã của tôi:

dynamoDB.updateItem({ 
    "TableName": "mytable", 
    "Key": { 
     "thing_ID": {"S": "0000"} 
    }, 
    "UpdateExpression": "SET", 
    "ExpressionAttributeNames": { 
     "SessionID": "" 
    }, 
    "ExpressionAttributeValues": { 
     "SessionID": { 
      "S": "maybe this works", 
     } 
    } 
}) 

Trả lời

11

Dường như bạn đang cố gắng để cập nhật một mục bằng cách sử dụng một Expression, và trong trường hợp này, UpdateExpression của bạn là không chính xác. Cả hai ExpressionAttributeNamesExpressionAttributeValues được sử dụng cho placeholder substitution trong biểu thức của bạn.

Tôi nghĩ rằng mã của bạn sẽ giống như thế này, nếu bạn muốn thiết lập một thuộc tính cho một mục:

dynamoDB.updateItem({ 
    "TableName" : "exampleTable", 
    "Key" : { 
     "hashAttributeName" : { 
      "S" : "thing_ID" 
     } 
    }, 
    "UpdateExpression" : "SET #attrName =:attrValue", 
    "ExpressionAttributeNames" : { 
     "#attrName" : "SessionID" 
    }, 
    "ExpressionAttributeValues" : { 
     ":attrValue" : { 
      "S" : "maybe this works" 
     } 
    } 
}); 

này sẽ cập nhật một mục mà trông như thế này:

{ 
    "Item":{ 
     "hashAttributeName":"thing_ID" 
    } 
} 

Để này:

{ 
    "Item":{ 
     "hashAttributeName" : "thing_ID", 
     "SessionID" : "maybe this works" 
    } 
} 
+0

Làm thế nào tôi có thể làm điều này nếu tôi muốn cập nhật nhiều Arrtibutes? Bạn có thể giúp đỡ không? – Karthik

+1

@Karthik 'UpdateExpression' của bạn chỉ có nhiều thuộc tính. Giống như 'SET Brand =: b, Price =: p'. Nếu bạn muốn thực hiện nhiều hành động khác nhau (như 'SET' và' REMOVE'), bạn cũng có thể thực hiện điều đó. Xem [* Sửa đổi các mục và thuộc tính bằng biểu thức cập nhật *] (http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.Modifying.html) và đặt câu hỏi mới nếu bạn gặp sự cố. – mkobit

+0

cảm ơn bạn rất nhiều. – Karthik

0

Đây là ví dụ sử dụng SDK AWS cho JavaScript v2.1.33.

Các ví dụ hoàn chỉnh là ở đây: https://github.com/mayosmith/HelloDynamoDB/blob/master/HelloDynamoDB.html

/* 
----------------------------------------------------------------- 
AWS configure 
Note: this is a simple experiement for demonstration 
purposes only. Replace the keys below with your own. 
Do not include the secret key in an actual production 
environment, because, then, it wont be secret anymore... 
----------------------------------------------------------------- 
*/ 
AWS.config.update({accessKeyId: 'AKIAJUPWRIYYQGDB6AFA', secretAccessKey: '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'}); 
// Configure the region 
AWS.config.region = 'us-west-2'; //us-west-2 is Oregon 
//create the ddb object 
var ddb = new AWS.DynamoDB(); 
/* 
----------------------------------------------------------------- 
Update the Table 
----------------------------------------------------------------- 
*/ 
//update the table with this data 
var params = { 
    Key: { 
    name: {S: 'John Mayo-Smith'}, 
    city: {S: 'New York'} 
    }, 
    AttributeUpdates: { 
    food: { 
     Action: 'PUT', 
     Value: {S: 'chocolate'} 
    } 
    }, 
    TableName: 'sampletable', 
    ReturnValues: 'ALL_NEW' 
}; 
//update the table 
update(); 
/* 
----------------------------------------------------------------- 
Get Item from the Table 
----------------------------------------------------------------- 
*/ 
//attribute to read 
var readparams = { 

    Key: { 
    name: {S: 'John Mayo-Smith'}, 
    city: {S: 'New York'} 
    }, 
    AttributesToGet: ['food'], 
    TableName: 'sampletable' 
}; 
//get the item 
read(); 
/* 
----------------------------------------------------------------- 
function update() 
Description: Calls updateItem which is part of the AWS Javascript 
SDK. 
Returns: JSON object (the object is stringifyed so we can see 
what's going on in the javascript console) 
----------------------------------------------------------------- 
*/ 
function update(){ 
    ddb.updateItem(params, function(err, data) { 
     if (err) { return console.log(err); } 
     console.log("We updated the table with this: " + JSON.stringify(data)); 
    }); 
} 
/* 
----------------------------------------------------------------- 
function read() 
Description: Calls getItem which is part of the AWS Javascript 
SDK. 
Returns: JSON object (the object is stringifyed so we can see 
what's going on in the javascript console) 
----------------------------------------------------------------- 
*/ 
function read(){ 
    ddb.getItem(readparams, function(err, data) { 
     if (err) { return console.log(err); } 
     console.log(": " + data);  

    console.log("John's favorite food is: "+ JSON.stringify(data.Item.food.S)); // print the item data 
}); 
} 
+2

Đối với những người gặp lỗi khi họ sử dụng AttributeUpdates. Họ nên sử dụng phương pháp được đánh dấu bởi mkobit vì "AttributeUpdates" là thông số kế thừa và sẽ không hoạt động với các thông số mới. Tuy nhiên, sẽ rất tuyệt nếu ai đó có thể đề xuất một cách tiếp cận đơn giản hơn kể từ khi xây dựng các đối tượng ExpressionAtrribute và ExpressionValue là tẻ nhạt khi bạn muốn tự động hoá này – Kartik

+0

@Kartik theo như tôi có thể nói không có cách tiếp cận đơn giản hơn. đây là đoạn trích tự động xây dựng các thông số bắt buộc mặc dù: https://gist.github.com/cmawhorter/1fe025393efc2545b2c7 –

+0

@CoryMawhorter Có vẻ tuyệt vời! Trên thực tế, tôi đã đi trước và viết một trình bao bọc xung quanh thư viện DynamoDB để thực hiện các hàm trợ giúp đơn giản giúp cho các nhiệm vụ DynamoDB bình thường dễ dàng hơn, cũng làm cho nó hứa hẹn dựa trên: D. Thư viện được gọi là Dynosaur (https://github.com/kartiklad/dynosaur), nó không có bất kỳ tài liệu hướng dẫn nào nhưng mã có một số nhận xét cơ bản trong đó – Kartik

0

Dưới đây đang làm việc cho tôi, hãy thử một lần

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

dynamo.updateItem({ 
TableName:'tableName', 
Key:{"primaryKey":"primaryKeyValue"}, 
AttributeUpdates: { images: { Action: "ADD", Value: item } }},function(err, data) { 
    if (err) 
     console.log(err); 
    else 
     console.log(data) 
}); 
Các vấn đề liên quan