みやたくワークスの徒然ブログ

みやたくワークスの徒然ブログ

PR

×

Profile

たくぷれっさ2号機

たくぷれっさ2号機

Calendar

Archives

2026.05
2026.04
2026.03
2026.02
2026.01
2020.10.29
XML
カテゴリ: GraphQL

GraphQL でDynamoDB からデータを取得する場合、Query を使います。

プライマリキーを指定して、特定の1件だけを取得する場合はGet テーブル名 Queryを使用します。
例では、groupName がパーティションキー、userID がソートキーです。

appDelegate.
appSyncClient ?. fetch (query: GetTmgpsGroupUserListQuery (
groupName: groupName,
userID: userId)) 



次にテーブルにあるデータを全件取得する場合は、List テーブル名 sListQueryを使用します。
キーを何も指定しなければ全件取得できます。

// groupNameでデータベースを検索する

appDelegate. appSyncClient ?. fetch ( ListTmgpsGroupUserListsQuery ())


最後に、ソートキーを指定せず、特定のパーティションキーのデータを全件取得する場合ですが、List テーブル名 sListQueryを使用するのは変わらず、パーティションキーだけを指定し、他の引数は全てnilにするだけです。

// groupNameでデータベースを検索する

appDelegate. appSyncClient ?. fetch (query: ListTmgpsGroupUserListsQuery (

groupName:appDelegate. GroupData . groupName ,

userID: nil ,

filter: nil ,

limit: nil ,

nextToken: nil ,

sortDirection: nil )


これにめっちゃはまり時間を浪費しました。

API.swift 上、 ListTmgpsGroupUserListsQuery のイニシャライザは以下の通り定義されています。

public init (
groupName: String ? = nil ,
userID: ModelStringKeyConditionInput ? = nil ,
filter: ModelTMGPSGroupUserListFilterInput ? = nil ,
limit: Int ? = nil ,
nextToken: String ? = nil ,
sortDirection: ModelSortDirection ? = nil )
{

self . groupName = groupName

self . userID = userID

self . filter = filter

self . limit = limit

self . nextToken = nextToken

self . sortDirection = sortDirection

}

引数を省略したら 自動的に nil を与えるよ、っていう定義です。
上記の2つ目のケースは、引数を1つも与えないことで、暗黙的に引数にnilが与えられることによってパーティションキー、ソートキーの指定がされずに全件データを取得しているのです。


つまり、、、パーティションキーだけ値をセットして、他の引数は全て明示的にnilを与えてあげればそれでよかったのです。
これに気づかずにどはまりしました。

ちなみに、ソートキーは以下のようになっています。

 input ModelStringKeyConditionInput {  eq: String  le: String  lt: String  ge: String  gt: String  between: [String]  beginsWith: String}

いまいち使い方が理解できていませんが、論理演算で該当するレコードだけが取得できそうです。

その他、取得件数の制限や、フィルター、ソート順の指定(昇順、降順)ができそうです。
今のところ、ソートしかちゃんと使いこなしていないです。

ハマり時間 4時間。。。

なんか、Safariのせいなのか、楽天ブログのせいか分かりませんが、文字を変換途中に勝手に変換終了しやがってうざい。
見たまま編集 off たらなおったのでブログのせいかな。





お気に入りの記事を「いいね!」で応援しよう

Last updated  2020.10.29 19:52:58
コメント(0) | コメントを書く


【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! -- / --
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
X

© Rakuten Group, Inc.
X
Mobilize your Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: