DynamoDB:提供的关键元素与架构不匹配

 StormyXin 发布于 2022-12-20 23:28

有没有办法根据不是哈希键的字段获取项目?

我的表用户: id (HashKey), name, email

我想检索发送电子邮件为'test@mail.com'的用户

怎么做到这一点?

我用boto尝试这个:

user = users.get_item(email='john.doe@gmail.com')

我收到以下错误:

'The provided key element does not match the schema'

小智.. 27

以下内容适用于AWS Lambda环境中的Node.js AWS SDK:

这对我来说很粗糙.我在尝试使用getItem方法时遇到了这个问题.无论我尝试什么,我都会继续收到此错误.我终于在AWS论坛上找到了一个解决方案:https://forums.aws.amazon.com/thread.jspa? threadID = 208820

令人费解的是,明显的解决方案与我能找到的所有AWS文档冲突.

这是适合我的代码:

var doc = require('dynamodb-doc');
var dynamo = new doc.DynamoDB();

var params = { }
params.TableName = "ExampleTable";
var key = { "ExampleHashKey": "1" };
params.Key = key;

dynamo.getItem(params, function(err, data) {
    if (err)
        console.log(err);
    else
        console.log(data)
});

谢谢!问题确实是AWS文档要求一个编组的对象(例如`var key = {“ ExampleHashKey”:{“ S”:“ 1”}}`),而实际的SDK要求一个普通的javascript对象(例如`var key = {“ ExampleHashKey”:“ 1”}`)。这也发生在`update` /`updateItem`方法中 (4认同)

DynamoDB的文档始终是一个挑战。我认为,此问题的根本原因是基本DynamoDB客户端和高级文档客户端之间的区别。基本客户端使用AttributeValues例如var key = {S:{name:'joe'}},而Document Client使用本机JavaScript对象,例如var key = {name:'joe'}。 (4认同)


Wolfwyrd.. 12

要查询不是哈希键的字段,您需要使用全局二级索引(GSI).有关GSI的详细信息,请查看此AWS Post.

更新2015年2月:现在可以将GSI添加到现有表中.有关详细信息,请参阅Amazon Docs.

遗憾的是,您无法将GSI添加到现有的DynamoDB表中,因此如果您确实需要查询,则需要创建新表并移植数据.

从DynamoDB常见问题解答:

问:如何为DynamoDB表创建全局二级索引?

必须在创建表时指定与表关联的所有GSI.此时,在创建表后无法添加GSI.有关创建表及其索引的详细步骤,请参见此处.每个表最多可以创建5个全局二级索引.

如果您不想移植数据,可以考虑创建第二个DynamoDB表,其中电子邮件作为哈希键,父记录的哈希值用作查找主数据表,但您可以想象这不是这是一个最佳解决方案,它带来了与主表保持同步的难题.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有