Gaelykチュートリアルは、データストアにいくつかの優れた低レベルラッパーを提供します。このGaelyk googleグループの記事では、エンティティのコレクションにキーを保存するだけで、関係をモデル化する簡単な方法について説明しています。
私の質問は、コレクション内の値に対してクエリを実行するにはどうすればよいですか?明確にするためのサンプルコードを次に示します...
def b1 = new Entity("Book")
b1.title = "Book1"
b1.save()
def b2 = new Entity("Book")
b2.title = "Book2"
b2.save()
def author1 = new Entity("Author")
author1.books = [b1.key, b2.key]
author1.name = "Chris"
author1.save()
// It is easy to simply query the Author entity for a standard string property
def query = new Query("Author")
query.addFilter("name", Query.FilterOperator.EQUAL, "Chris")
PreparedQuery preparedQuery = datastore.prepare(query)
def authors = preparedQuery.asList(withLimit(1))
assert authors[0].name == "Chris"
// But I can't find out how to query a collection property eg books on the Author entity
def query2 = new Query("Author")
// I would like to do something to return the entity if the value is in the collection property
// eg if there could be something like 'CONTAINS' criteria ...
// Unfortunately Query.FilterOperator.CONTAINS doesn't exist...
query2.addFilter("books", Query.FilterOperator.CONTAINS, b2.key)
PreparedQuery preparedQuery2 = datastore.prepare(query2)
def authors2 = preparedQuery2.asList(withLimit(1))
assert authors2[0].name == "Chris"
エンティティのコレクションプロパティ内で一致を検索するクエリを作成するにはどうすればよいですか?つまり、上記の神話上の「FilterOperator.CONTAINS」クエリの機能を再現する方法は?