我似乎无法将自己的头围绕DynamoDB的AWS Ruby SDK文档(或更具体地说是DynamoDB数据模型的概念)。使用Ruby了解AWS DynamoDB中的属性
具体来说,我一直在读:http://docs.aws.amazon.com/AWSRubySDK/latest/frames.html#!AWS/DynamoDB.html
Note: I have read through the Data Model documentation as well and it's still not sinking in; I'm hoping a proper example in Ruby with clear up my confusion
在下面的代码片段中,我创建了一个名为“my_books”表,该表有一个名为“ITEM_ID” primary_key,这是一个哈希键(不是哈希/范围组合)...
dyn = AWS::DynamoDB::Client::V20120810.new
# => #<AWS::DynamoDB::Client::V20120810>
dyn.create_table({
:attribute_definitions => [
{ :attribute_name => "item_id", :attribute_type => "N" }
],
:table_name => "my_books",
:key_schema => [
{ :attribute_name => "item_id", :key_type => "HASH" },
],
:provisioned_throughput => {
:read_capacity_units => 10,
:write_capacity_units => 10
}
})
# => {:table_description=>{:attribute_definitions=>[{:attribute_name=>"item_id", :attribute_type=>"N"}], :table_name=>"my_books", :key_schema=>[{:attribute_name=>"item_id", :key_type=>"HASH"}], :table_status=>"ACTIVE", :creation_date_time=>2014-11-24 16:59:47 +0000, :provisioned_throughput=>{:number_of_decreases_today=>0, :read_capacity_units=>10, :write_capacity_units=>10}, :table_size_bytes=>0, :item_count=>0}}
dyn.list_tables
# => {:table_names=>["my_books"]}
dyn.scan :table_name => "my_books"
# => {:member=>[], :count=>0, :scanned_count=>0}
然后我尝试用新项目填充表格。我的理解是,我应该为item_id
指定数值(这是主键),然后我可以指定新项目/记录/文件我加入到表中的其他属性...
dyn.put_item(
:table_name => "my_books",
:item => {
"item_id" => 1,
"item_title" => "My Book Title",
"item_released" => false
}
)
但是,最后的命令返回以下错误:
expected hash value for value at key item_id of option item
所以,虽然我不太明白什么是哈希将作出的,我试着这样做:
dyn.put_item(
:table_name => "my_books",
:item => {
"item_id" => { "N" => 1 },
"item_title" => "My Book Title",
"item_released" => false
}
)
但现在返回以下错误...
expected string value for key N of value at key item_id of option item
我试过不同的变化,但似乎无法弄清楚这是如何工作的?
EDIT/UPDATE:通过开放的阿加西所建议 - I值改变从1
到"1"
。我不太确定为什么这必须引用,因为我已经将类型定义为数字而不是字符串,但好吧,让我们接受它并继续。
试试'...“ITEM_ID” => {“N” =>“1”},...' - 根据错误信息预期字符串值 – 2014-11-24 18:29:31