无法更新 Dynamodb 表,出现 ValidationException

2024-02-20

我需要仅使用分区键来更新我的 dynamodb 表。但我得到了验证异常。 我创建了一个包含 3 个字段的表。

  1. id(分区键)
  2. 名称(排序键)
  3. age

然后我尝试仅使用 id 更新年龄字段。(尝试将年龄 30 修改为 40)这是我的代码

var AWS = require("aws-sdk");

AWS.config.update({
    region: "us-east-1",

});

var params = {
    TableName: 'test',
    Key: { id: '100' },
    UpdateExpression: 'set #age = :age ',
    ConditionExpression: '#age = :testAge',
    ExpressionAttributeNames: { '#age': 'age' },
    ExpressionAttributeValues: { ':age': '40', ':testAge': '30' }
};

var docClient = new AWS.DynamoDB.DocumentClient();
docClient.update(params, function (err, data) {
    if (err) {
        console.log(err);
    }
    else {
        console.log(data);
    }
});

但我遇到了这样的错误。

{ [ValidationException: The provided key element does not match the schema]
  message: 'The provided key element does not match the schema',
  code: 'ValidationException',
  time: Thu Nov 17 2016 22:38:01 GMT+0530 (IST),
  requestId: '34PNMFM6CEACQIRHTSV77OI0JRVV4KQNSO5AEMVJF66Q9ASUAAJG',
  statusCode: 400,
  retryable: false,
  retryDelay: 0 }

出现错误后,我像这样修改了我的 params 变量

 var params = {
        TableName: 'test',
        Key: { id: '100',name: 'manaf' },
        UpdateExpression: 'set #age = :age ',
        ConditionExpression: '#age = :testAge',
        ExpressionAttributeNames: { '#age': 'age' },
        ExpressionAttributeValues: { ':age': '40', ':testAge': '30' }
    };

使用此,更新成功完成。如何在没有排序键的情况下更新表?


目前,DynamoDB 更新 API 没有仅通过分区键更新项目的选项。也没有类似于batchWriteItem 的batchUpdateItem API。

因此,如果排序键不可用,请获取分区键的所有排序键并更新分区和排序键组合的每个项目。

对于主键,您必须提供所有属性。为了 例如,使用简单的主键,您只需要提供一个值 为分区键。对于复合主键,您必须提供 分区键和排序键的值。

示例代码:-

您可能需要根据您的表进行更改。下面的代码使用“Movies”表,其中“yearkey”作为分区键,“title”作为排序键。

以下代码更新给定哈希键“2012”的“createdate”属性。

变量paramsUpdate是根据查询操作形成的。请根据您的要求(即表结构)进行相应更新。逻辑保持不变,只需相应更改表名和键值即可。

var AWS = require("aws-sdk");
var creds = new AWS.Credentials('akid', 'secret', 'session');

AWS.config.update({
    region : "us-west-2",
    endpoint : "http://localhost:8000",
    credentials : creds
});

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

var hashKey = 2012;

var paramsQuery = {
    TableName : "Movies",
    KeyConditionExpression : 'yearkey = :hkey',
    ExpressionAttributeValues : {
        ':hkey' : hashKey

    }
};

function updateItem(paramsUpdate) {
    console.log("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));
        }
    });
}

docClient.query(paramsQuery, function(err, data) {
    if (err) {
        console.error("Unable to read item. Error JSON:", JSON.stringify(err,
                null, 2));
    } else {
        console.log(data.Count);
        var itemIndex = 0;
        while (itemIndex < data.Count) {

            console.log('Hashkey to be updated ======>',
                     data.Items[itemIndex].yearkey,
                     ';Title to be updated ========>',
                     data.Items[itemIndex].title);
            var paramsUpdate = {
                TableName : "Movies",
                Key : {
                    "yearkey" : data.Items[itemIndex].yearkey,
                    "title" : data.Items[itemIndex].title
                },
                UpdateExpression : "set #createdate = :createdate",
                ExpressionAttributeNames : {
                    '#createdate' : 'createdate'
                },
                ExpressionAttributeValues : {
                    ':createdate' : '2016-11-17'
                },
                ReturnValues : 'UPDATED_NEW'
            };
            updateItem(paramsUpdate);
            itemIndex++;

        }
    }
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法更新 Dynamodb 表,出现 ValidationException 的相关文章

随机推荐

  • Rust,如何使用DLL中的全局变量? C++ 等效项需要 __declspec(dllimport)

    Edit 经过一番研究 我找到了部分解决方案 这link name属性 https doc rust lang org reference items external blocks html the link name attribute
  • 如何使用c#检查程序中的图像质量?

    我想使用我的应用程序检查照片是否适合打印 我该怎么做 我对照片质量不太了解 每张照片的分辨率是否相同 我认为您可以确定地检查打印质量的唯一因素 因为其他因素是主观的 是图像的分辨率与预期的打印尺寸 如果您有其他具体要求 例如图像必须是彩色的
  • Python multiprocessing - 跟踪pool.map操作的过程

    我有一个执行一些模拟的功能 返回字符串格式的数组 我想运行模拟 函数 变化的输入参数值 超过 10000 个可能的输入值 并将结果写入单个文件 我正在使用多处理 特别是 pool map 函数 并行运行模拟 整个过程运行模拟功能超过1000
  • 如何将 Facebook onelogin 事件绑定到自定义按钮?

    我知道如何使用自定义按钮作为 Facebook 登录 现在我想bind onlogin事件到自定义按钮 但我不知道该怎么做 原始代码
  • 唯一索引不适用于 Mongoose / MongoDB

    我在使用 Mongoose MongoDb 创建唯一索引时遇到问题 无法让它工作 当我设置唯一索引时 我可以添加两个具有相同属性值的文档 我已经尝试了我能想到的一切 重新启动 一切 更改语法等 Code Addtion gt gt 这是我用
  • MongoDB 如何评估多个 $or 语句?

    MongoDB 将如何评估此查询 db testCol find or a 1 b 12 b 9 c 15 c 10 d foo 当扫描文档中的值时 如果第一个 OR 语句为 TRUE 其他语句也会被评估吗 从逻辑上讲 如果 MongoDB
  • 如何防止 UIButton 在按下时突出显示?

    When an UIButton按下后 正常情况是它会突出显示 即阴影层会覆盖图像 有没有办法防止这种情况发生 有没有一个属性可以处理这个问题 通常 您不会使用 Xcode 按按钮 而是使用手指 或鼠标 但撇开挑剔不谈 adjustsIma
  • 使用 JQuery Mobile 向上或向下移动控制组中的多个链接

    这是我上一个问题的后续问题 控制组 JQuery Mobile 上有 3 个水平按钮 多行 https stackoverflow com questions 26088729 controlgroup 3 buttons horizont
  • 使用 JS 在 Google Apps 脚本文档中查找未知字符串并将其更改为大写

    我写在Fountain markdown http fountain io http fountain io 在谷歌文档中 喷泉是用来写剧本的 我想通过自动大写某些元素 打开或使用按钮等 使喷泉中的书写更加友好 这是一个格式正确的剧本 在喷
  • 哪个 django OpenID 库可与新的 Google OpenID 配合使用

    由于 Google 弃用了 OpenID 2 0https developers google com accounts docs OpenID2 https developers google com accounts docs Open
  • 如何使符号计算中的所有低值都变为零?

    如何将 SymPy 表达式中的所有低值设为零 例如我的结果是 1 0 a1 cos q1 6 12e 17 a2 sin q2 a3 sin q2 q3 a4 sin q2 q3 q4 sin q1 1 0 a2 cos q2 a3 cos
  • Python中计算二叉树的深度

    我是编程新手 正在尝试计算 Python 中二叉树的深度 我相信我的错误是因为深度是 Node 类的方法而不是常规函数 我正在尝试学习OOP并希望使用一种方法 这可能是一个新手错误 这是我的代码 class Node def init se
  • OpenCL 在线编译:从 cl::program 或 cl::kernel 获取程序集

    我正在使用 OpenCL 运行内核基准测试 我知道我可以使用 OpenCL 供应商提供的各种工具离线编译内核 即ioc64 or poclcc 问题是我得到的性能结果无法用这些工具的汇编 OpenCL 运行时开销或类似的来解释 我想看到由我
  • 我无法删除 Azure AD 门户中的本机应用程序注册

    我只想删除出于测试目的而创建的 AD 应用程序注册 我无法删除它 因为删除按钮呈灰色 在我删除另一个未使用的应用程序之前没有任何问题 有什么建议么 游戏有点晚了 但是当尝试上述步骤时 它们对我不起作用 总是被禁用 并且由于某种原因 我无法将
  • 整个计算机处于 Git 状态未跟踪文件

    我是 git 新手 我想我不小心克隆到了根目录中 当我提交一个文件 index html 时 我注意到我的整个计算机 我的桌面 我的文档等 都在未跟踪的文件中 我删除了存储库 并且想删除所有未跟踪的文件 显然不想删除计 算机中的所有内容 我
  • 在 Safari 中打开 WebView 链接

    我正在 Cocoa 中开发一个应用程序 我想知道是否有一种方法 如何使我的 webview 中单击的任何链接在 Safari 或默认浏览器 中启动 提前致谢 我自己刚刚遇到了这个问题 并通过以下方式解决了它 我的主控制器对象被设置为 Web
  • 捕获 C++ 库崩溃的一致方法

    我浏览了不同的网站 除了那些似乎不起作用的网站之外 找不到这个问题的任何答案 正如标题所示 我正在尝试找到一种方法来捕获我正在处理的库是否崩溃 我有一个 Root 类 它保存我的库中的许多管理器样式类的实例 并在其析构函数中释放这些实例 当
  • 在reactjs中悬停时显示组件[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我创建了几个带有特定内容标题的部分 我想在悬停在不同部分上方时显示一个简短的预览 有谁知道如何创建一个具有条件渲染反应组件的hover
  • 冒泡排序双向链表

    我的双向链表冒泡排序功能有问题 当我以单链接方式对节点进行排序时 仅使用 gt next 它可以工作 但我无法使其与 gt prev 指针一起使用 这是我正在使用的代码 void sort int count struct data tmp
  • 无法更新 Dynamodb 表,出现 ValidationException

    我需要仅使用分区键来更新我的 dynamodb 表 但我得到了验证异常 我创建了一个包含 3 个字段的表 id 分区键 名称 排序键 age 然后我尝试仅使用 id 更新年龄字段 尝试将年龄 30 修改为 40 这是我的代码 var AWS