DynamoDB PutItem然后与ReturnValues ALL_NEW的UpdateItem一致性

时间:2017-08-17 07:18:55

标签: amazon-dynamodb consistency eventual-consistency

使用PutItem添加新项目,然后使用返回值设置为UpdateItem的{​​{1}}进行更新时,预计返回值是否会保持一致?

例如放置一个项目;

ALL_NEW

然后更新项目;

{key: 1a a: 1}

我希望ReturnValues:ALL_NEW返回

{key: 1, b: 2}

但看起来情况并非如此?

1 个答案:

答案 0 :(得分:0)

我已经更新了成功执行put项目的项目,并按预期得到了结果。

注意:在DynamoDB本地执行测试。

  

ALL_NEW - 返回项目的所有属性   在UpdateItem操作之后。

示例代码: -

var docClient = new AWS.DynamoDB.DocumentClient();

var table = "post";

var paramsPut = {
    TableName: table,
    Item: {
        "postId": '16',
        "Pos": {
            "key": "1a", "a": "1"
        }
    }
};

var paramsUpdate = {
    TableName: "post",
    Key: {
        "postId": "16"
    },
    UpdateExpression: "SET Pos.#key = :keyVal, Pos.b = :keyVal2",
    ExpressionAttributeNames: {
        "#key": "key"
    },
    ExpressionAttributeValues: {
        ":keyVal": "1",
        ":keyVal2": "2"
    },
    ReturnValues: "ALL_NEW"
};

console.log("Adding a new item...");
docClient.put(paramsPut, function (err, data) {
    if (err) {
        console.error("Unable to add item. Error JSON:", JSON.stringify(err,
            null, 2));
    } else {
        console.log("Added item:", JSON.stringify(data, null, 2));

        console.log("Then Updating the item...");
        docClient.update(paramsUpdate, 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));
            }
        });
    }
});

<强>输出: -

Adding a new item...
Added item: {}
Then Updating the item...
UpdateItem succeeded: {"Attributes":{"Pos":{"a":"1","b":"2","key":"1"},"postId":
"16"}}