我有一个数据存储实体Foo
,它有六个属性bar1
,bar2
,bar3
,bar4
,bar5
和{{1 }}。它们包含一对值,如下所示。
bar6
我的目标是检查任何给定的字母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
或bar6
。
我已阅读过GAE的NDB查询文档。我看到一个属性是否具有多个值,即Mr. X
是否可测试。但不是像bar3 IN ['python', 'ruby', 'php']
那样的情况。
我还阅读了'python' IN [bar1, bar2, bar3, bar4, bar5, bar6]
案例引起的并发症。
需要帮助以最有效的方式构建测试。 有帮助吗?
答案 0 :(得分:0)
我同意GAEFan认为ComputedPorperty或Search API更可取。但是你可以使用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"