有没有一种方法可以根据不是哈希键的字段获取项目?
例子
我的用户表: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'
有没有一种方法可以根据不是哈希键的字段获取项目?
例子
我的用户表: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'
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)
});
如果您不想迁移数据,可以考虑创建第二个 DynamoDB 表格,其中电子邮件地址作为哈希键,父记录的哈希值用作在主数据表中查找的关键,但是正如您所想象的那样,这并不是一个最佳解决方案,并且它有自己的麻烦,需要保持与主表同步。问:如何为DynamoDB表创建全局二级索引?
与表相关联的所有GSI必须在表创建时指定。 此时,在表创建后添加GSI是不可能的。有关创建表及其索引的详细步骤,请参见此处。您可以为每个表创建最多5个全局二级索引。
当我发送字符串而不是整数时,我也遇到了这个错误。
当然,这是在写入数据库而不是从中读取时发生的。
$model = ModelData::where('PartitionKey', (string)$SearchPartitionKey)->where('SortKey',(integer)$SearchSortKey)->get();
- Cristian Sepulveda我在表中有一个分区键(partition key)和排序键(sort key)。
之前只使用了分区键进行查询,但出现了错误。
显然,使用复合键进行查询解决了这个问题。
var params = {
TableName: 'mytable',
Key: {
'name': {S: 'John'},
'surname': {S: 'Sena'}
}
};
我在Java中遇到了这个错误,因为我在RANGE键上使用了@DynamoDBHashKey
注释。我需要使用@DynamoDBRangeKey
注释来代替对象的ID。
我的AWS Lambda函数出现了这个错误,因为我的参数是BigInt类型,需要转换为Number类型。我进行了如下更改:
let data = await docClient.get({ TableName: "items", Key: { "accountid": accountId, "itemid": itemId } }).promise();
...转化为以下内容:
let data = await docClient.get({ TableName: "items", Key: { "accountid": Number(accountId), "itemid": Number(itemId) } }).promise();
提供的键元素与模式不匹配
。GetItem
API的能力,而必须使用Query
API,该API允许您检索与键匹配的多个项目(如果存在)。提供的键元素与模式不匹配
是由于高级和低级客户端之间的差异。高级客户端接受JSON值,而低级客户端接受DynamoDB-JSON。混合使用这些参数将导致异常。这些差异在以下博客文章中有详细说明:
https://aws.amazon.com/blogs/database/exploring-amazon-dynamodb-sdk-clients/
在我的Java应用程序中,我遇到了这个错误,因为我在DAO类中不小心注释了两个范围键(@DynamoDBRangeKey
),但实际上只应该有一个。我将新添加的注释更改为@DynamoDBAttribute
,问题得以解决。
GetItemCommand
仅提供分区键的值,并且该表具有复合主键,则需要同时指定排序键的值以检索匹配该组合的单个记录,或者切换到 QueryCommand
以返回与分区键匹配的任何内容,而不考虑排序键。希望这可以帮助其他初学者解决问题。请注意保留 HTML 标签。
var key = { "ExampleHashKey": { "S": "1" } }
),而实际的SDK需要一个普通的JavaScript对象(例如var key = { "ExampleHashKey": "1" }
)。这也发生在“update”/“updateItem”方法中。 - aviggianovar key = {"ExampleHashKey": {S: "1"}};
- gregn3