我有一个具有重复属性的ndb模型:
class MyModel(ndb.Model):
foo = ndb.KeyProperty(repeated=True)
我想对foo
进行不等式过滤,这意味着我需要按foo
排序:
我希望查询包含foo为空的实体。如果我在foo中放入一个虚拟字段,它会起作用:
def _pre_put_hook(self):
if not self.foo:
self.foo.append(ndb.Key('Dummy Kind', 'Dummy ID'))
但这似乎不是一个干净的方法。有更好的方法吗?在
当数据存储在索引中存储带有
repeated=True
的属性时,它stores one row for each value。这意味着,如果您有一个空的重复属性,它将不会显示在您的EntitiesByProperty索引中。这意味着不可能查询空的重复属性。在有几种选择,但它们各有利弊:
添加虚拟值
您建议的这种方法的好处是现有查询将提供所需的结果。但是,在添加实际数据时,必须处理清除伪键的问题。在
使用
ComputedProperty
您可以为foo属性的大小添加一个新属性:
但是,要获得
^{pr2}$foo
值与my_key
不匹配或为空的实体,必须编写两个查询来获取结果:请注意,如果
foo
没有重复,则进行以下查询将得到所需的结果:即使没有空列表大小写,在使用重复属性时也需要小心。特别是,只有一个重复的属性必须与您的键匹配。因此,下面定义的模型仍将匹配您的查询,因为
my_key2 != my_key
:相关问题 更多 >
编程相关推荐