Skip to content
Jesse Schoch edited this page May 8, 2015 · 2 revisions

a few notes

default test mix env is setup to use dynamodb local

get seems to only want the primary key in the map argument

iex(1)> user = %User{email: "bubba@foo.com", name: "Bubba", age: 23, admin: false}
iex(7)> ExAws.Dynamo.get_item!("Users",user)
** (Protocol.UndefinedError) protocol Enumerable not implemented for %User{admin: false, age: 23, email: "bubba@foo.com", name: "Bubba"}
    (elixir) lib/enum.ex:1: Enumerable.impl_for!/1
    (elixir) lib/enum.ex:112: Enumerable.reduce/3
    (elixir) lib/enum.ex:1265: Enum.reduce/3
    (elixir) lib/enum.ex:915: Enum.into/4
             lib/ex_aws/dynamo/impl.ex:166: ExAws.Dynamo.Impl.get_item/4
             lib/ex_aws/dynamo/impl.ex:171: ExAws.Dynamo.Impl.get_item!/4
iex(13)> ExAws.Dynamo.get_item!("Users",%{email: user.email})|> ExAws.Dynamo.Decoder.decode
%{"admin" => false, "age" => 23, "email" => "bubba@foo.com", "name" => "Bubba"}

stream_* embeds it's items in "Items"

{:ok,
 %{"Count" => 1, "Items" => #Function<25.29647706/2 in Stream.resource/3>,
   "LastEvaluatedKey" => %{"email" => %{"S" => "bubba@foo.com"}},
   "ScannedCount" => 1}}

simple fetch items from stream query, would be nice to have stream_scan!

iex(18)> {:ok,map} = Dynamo.stream_scan("Users", limit: 1)
iex(23)> map["Items"]  |> Stream.map(&(ExAws.Dynamo.Decoder.decode&1))|>Enum.to_list      [%{"admin" => false, "age" => 23, "email" => "bubba@foo.com",
   "name" => "Bubba"}]