2017-06-16 98 views
0

我有了六個屬性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 

我的目標是檢查ABCDEF是否有任何給定的字母出現在任何財產bar1bar2bar3bar4bar5bar6Mr. X

我已閱讀GAE的NDB查詢文檔。我看到一個屬性是否有多個值,即bar3 IN ['python', 'ruby', 'php']是否是可測試的。但不是像'python' IN [bar1, bar2, bar3, bar4, bar5, bar6]這樣的情況。

我也讀過repeated=True案例引起的併發症。

需要幫助以最有效的方式構建測試。 有什麼幫助嗎?

+0

聽起來像是爲SEACH API的工作。或者,也許添加一個ComputedProperty,它是所有'barX'列表的串聯 – GAEfan

回答

0

我同意GAEFan ComputedPorperty或Search API會更好。但是你可以使用ndb.or把工作沒有canging模型完成的:

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"