搜索GAE数据存储区属性

时间:2017-06-16 19:00:30

标签: python google-app-engine datastore

我有一个数据存储实体Foo,它有六个属性bar1bar2bar3bar4bar5和{{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 ABCDE是否出现在任何字母中F的属性bar1bar2bar3bar4bar5bar6

我已阅读过GAE的NDB查询文档。我看到一个属性是否具有多个值,即Mr. X是否可测试。但不是像bar3 IN ['python', 'ruby', 'php']那样的情况。

我还阅读了'python' IN [bar1, bar2, bar3, bar4, bar5, bar6]案例引起的并发症。

需要帮助以最有效的方式构建测试。 有帮助吗?

1 个答案:

答案 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"