我的NDB模型类有重复的属性:
class Something(ndb.Model):
tags = ndb.StringProperty(repeated=True)
有没有办法查询tags
等于['music', 'cinema']
的所有实体?即返回的每个实体应同时包含music
和cinema
标记,并且不应包含其他tags
。 The GAE doc说
您无法将重复的属性与列表对象(数据存储区)进行比较 不会理解的。)
我是否必须使用一个标签获取所有实体,然后手动过滤它?
答案 0 :(得分:1)
存储列表的序列化/哈希版本并查询与之完全匹配的内容可能比获取所有实体更有效:
class Something(ndb.Model):
tags = ndb.StringProperty(repeated=True)
tagset = ndb.ComputedProperty(lambda self: ','.join(self.tags.sort()))
然后查询在搜索标签上使用相同的序列化:
q = Something.query(cls.tagset == ','.join(sorted(['music', 'cinema'])))
答案 1 :(得分:-1)
是的,您可以使用IN
属性,该属性在Querying for Repeated Properties时使用列表对象:
Something.tags.IN(['music', 'cinema'])
要查看是否存在两个标记,您可以使用AND
操作:
Something.tags.query(ndb.AND(Something.tags == 'music',
Something.tags == 'cinema'))