emahiro's ProgrammingBlog

勉強記録と書評とたまに長めの呟きを書きます

GQLでプライマリーキーのwhere句指定を行う

GoogleCloudStrageでkey(RDBでいうところのprimarykey)をフックにしてentityをselectしようと思ったらちょっとハマったのでそのメモ

最初に書いたクエリ

SELECT * FROM KIND_NAME where ID = 123

この形式ではentityを取得できない。

正しいクエリ

SELECT * FROM KIND_NAME where __key__ = key(KIND_NAME, 123)

とするとうまくいく。

GQLではプライマリーキーをwhereに指定する場合にはIDではなく、 __key__ を指定し、かつ key(KIND_NAME, (ID)) という形式にしないと検索できない。

こんなことでハマってしまったのであるが、 リファレンス には

Every GQL query string always begins with SELECT <something>, where <something> is one of the following:

- *
- <property-list>, a comma delimited list of properties to be returned from the query.
- __key__, which returns keys only. (__key__はkeys(primarykey)のみを返す)

と記載してあった。

解答がわかった後にリファレンスをもう一度見直したけど、イマイチわかりづらい。
RDBと同じ感覚でいるとNoSQLでは結構ギャップを感じることが多い。