我的TwAccount是
class TwAccount(ndb.Model):
100 different properties here
error = ndb.IntegerProperty(repeated=True)
我尝试:
twaccount_dbs = model.TwAccount.query().filter(ndb.GenericProperty('followuserfollowme') == True)
它返回1个实体
但是我只想查询1个属性。
twaccount_dbs = model.TwAccount.query().filter(ndb.GenericProperty('followuserfollowme') == True).fetch(projection=["error"])
然后返回0个实体。
我尝试
twaccount_dbs = model.TwAccount.query().filter(ndb.GenericProperty('followuserfollowme') == True).fetch(projection=[model.TwAccount.error])
但它还会返回0个实体
我希望它返回1个实体。
更新1: 我发现如果error是空值(因此不存在),则投影查询将返回0
我的目标是查询TwAccount中的所有实体。如果错误为空,则执行deferred.defer(function,entity_key)。
我想使用投影查询来节省阅读成本。不可能吗?
答案 0 :(得分:1)
不幸的是,您无法通过unset / empty属性过滤查询结果:
来自Index definition and structure:
仅当实体具有索引值集时,它才包含在索引中 对于索引中使用的每个属性;如果索引定义引用 到该实体没有价值的财产,该实体将不会 出现在索引中,因此将永远不会返回 任何基于索引的查询。
另请参阅相关的AppEngine: Query datastore for records with <missing> value