2011-01-11 9 views
0

制限付きの制限(最大500文字)を克服するために、最近私のモデルのプロパティの1つをStringPropertyからTextPropertyに更新しなければなりませんでした。Google Apps EngineのTextPropertyタイプのプロパティに値が設定されていないエンティティを効率的に除外できますか?どうやって?

SomeEntity.gql(「プロパティ1 =::!1」、なし)property1がでプロパティです

私のような私の古いクエリの一部を実現するまでそれは問題ではありませんでしたこのモデルは、クエリが以前働いていた

。:-(動作しない可能性があり、それは私だけproperty1に設定した値を持っていたそれらのエンティティを取得するのに役立ちました。

を私は効率的にこれで同じ結果を得ることができますどのようにシナリオタイプはTextProperty

+0

!= here:!= translates into: 2つのクエリ、1つは<を使用し、もう1つは>を使用します。 Noneは可能な限り小さな値なので、>だけを使うこともできます。 –

答えて

1

TextPropertyをフィルタリングまたは注文することはできません。あなたがやりたいことを達成するために、新しいBooleanProperty 'has_text'を追加し、その上にフィルタをかけます。次に、TextPropertyを変更するたびにBooleanPropertyを設定するだけです。

このソリューションは、Google App Engineのフィルタリングしたいものすべてを事前計算するという一般的な規約に従います。

+0

確かに、これは動作します。私は、問題を解決するかもしれない文書化されていないハッキングについて調査したかったのです。 – nemesisfixx

0

ndbを使用している場合、フィルタを簡単に表現できないクエリを実行するには、しばしばComputedPropertyを追加することが最良の方法です。インデックスの新しいプロパティを追加した後に、各エンティティを再配置する必要があることに注意してください(これは以前推奨されていたブール値プロパティにも適用されます)。

関連する問題