如何在设置实体后测试 NDB 中未设置的重复属性?
我能找到的唯一参考说:
在重复属性上查询 None 值具有未定义的行为;不要那样做。
如何在设置实体后测试 NDB 中未设置的重复属性?
我能找到的唯一参考说:
在重复属性上查询 None 值具有未定义的行为;不要那样做。
如果您从未在重复属性的列表内容中添加任何内容,则不会发送任何值,并且该属性将显示为<missing>
not as<null>
根据关于查询和索引的 App Engine 文档,属性没有值的实体和属性值为空的实体之间存在区别;和
查询永远不会返回没有过滤属性的实体。
所以不可能为这些旧记录编写查询。
请参阅 AppEngine 上面引用的其余答案
:Query datastore for records with <missing> value
如果您希望能够查询此类内容,则应在数据模型中强制执行此操作。例如,您可以有ndb.ComputedProperty
一个布尔值,对应于相应列表的长度是否为零,例如
class MyModel(ndb.Model):
my_repeat = ndb.StringProperty(repeated=True)
sentinel = ndb.ComputedProperty(lambda self: len(self.my_repeat) == 0)
并查询这些缺失值,您可以使用
MyModel.query(MyModel.sentinel == True)
如果您的数据存储中有一组现有的此类对象,您可以对它们运行一次mapreduce,并使用更新的模型定义简单地检索每个实体,然后将每个实体放回数据存储中。这将保持所有现有属性相同并使用sentinel
值进行更新。