2017-06-16 15 views
0

私は6つのプロパティbar1bar2bar3bar4bar5bar6を持つデータストアエンティティFooを持っています。次のような値のペアが含まれています。検索GAEデータストアのプロパティは

UserID bar1 bar2 bar3 bar4 bar5 bar6 
Mr. X A,B C,D E,F A,D C,E, B,F 
Mr. Y F,D A,C E,B A,D C,E B,F 

私の目標は、AまたはBまたはCまたはDまたはEまたはFは、任意のプロパティbar1またはbar2またはbar3またはbar4またはbar5またはMr. Xためbar6に表示され、任意の文字かどうかを確認することです。

私はGAEのNDBクエリドキュメントを読んでいます。プロパティに複数の値のいずれかがあるかどうか、つまりbar3 IN ['python', 'ruby', 'php']がテスト可能かどうかがわかります。しかし、'python' IN [bar1, bar2, bar3, bar4, bar5, bar6]のような状況ではありません。

私はrepeated=Trueケースから生じる合併症も読んだことがあります。

最も効率的な方法でテストを構築するのに役立つ必要があります。 助けてください?

+0

をさがすのAPIのための仕事のようですね。または、おそらく、すべての 'barX'リストの連結であるComputedPropertyを追加してください – GAEfan

答えて

0

私は、ComputedPorperty APIまたはSearch APIが望ましいというGAEFanに同意します。しかし、あなたは仕事がモデルをcangingずに成し遂げるためにndb.or使用することができます

from google.appengine.ext import ndb 

class Foo(ndb.Model): 
    user = ndb.StringProperty() 
    bar1 = ndb.StringProperty(repeated = True) 
    bar2 = ndb.StringProperty(repeated = True) 
    bar3 = ndb.StringProperty(repeated = True) 

Foo(user='Mr X', bar1=['A','B'],bar2=['C','D'],bar3=['E','F']).put() 
Foo(user='Mr Y', bar1=['F','D'],bar2=['B','C'],bar3=['E','B']).put() 

for res in Foo.query(ndb.OR(Foo.bar1 == 'A', Foo.bar2 == 'A', Foo.bar3 == 'A')): 
    print res.user 

出力

"Mr X" 
関連する問題