2011-07-01 8 views
0

注:この例では、問題のほんの代表ではなく、実際の使用例ですGoogleのアプリエンジン - 専用フィールドのためのクエリ

Iは、例えば、自動車やCarCategoryのための特定のオブジェクトを持っている場合、私は知りたいのです

Owner 
    - name 
    - age 

Car 
    - name 
    - brand 
    - category(reference) 
    - owner (reference) 

CarCategory 
    - name 
    - property 

特定のフィールドを照会できますか?

は、例えばCarCategory:

クエリ= GqlQuery( "カーからカテゴリを選択")

私はこのエラーを取得しています:BadQueryError:エラーを解析:記号カーで追加のシンボルを期待していません

更新:特定のユーザー

が所有するすべてのカテゴリのリストを持っているしたい場合はどう

私は最も効率的な方法でそれをしたいと思います。

答えて

1

App Engineデータストア内の個々のフィールドを照会することはできません。エンティティは、シリアル化されたプロトコルバッファとして完全に格納され、取得されるため、特定のフィールドだけを取得する方法はありません。

db.Model抽象化が与えられていると、返されたデータを表す賢明な方法はありません。単に制約を破る可能性があるため、モデルにいくつかのフィールドだけを入力しても問題はありませんそれをデータストアに戻そうとすると!

あなたのアップデートに対応しています:これは伝統的に、App Engineでサポートされていない結合と集約を必要とします。あなたの最良の選択肢は、すべてのユーザーのクエリを検索して、ユーザーのCarエンティティを検索し、Categoryプロパティで自分で分類することです。

1

自分で並べ替えるよりも多くのオプションがあるようです。それぞれのカテゴリーに固有のkey_nameを作成することができます(例えば、 "Bronco")、またはユニークに作成されたキー "8HJ876KKL"(おそらくuuidによって作成されます)を使用します。 Carエンティティでは、カテゴリのkey_nameでStringPropertyを持つことができます。あなたは車が複数のカテゴリに属したい場合、これをStringListPropertyにすることができます。次に、key_nameでカテゴリを問い合せることができます。

もう1つの選択肢は、カテゴリオブジェクトを指すために車内のReferencePropertyを使用することです。次に、カテゴリに属する​​すべてのCarを見つけるときに、正確なキーを照会することができます。

ReferencePropertyとStringPropertyとStringListPropertyのどちらが効率的なクエリであるかわかりません。

関連する問題