NDB投影查询返回不正确的实体数

时间:2018-08-25 12:30:04

标签: google-app-engine google-cloud-datastore app-engine-ndb

我的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)。

我想使用投影查询来节省阅读成本。不可能吗?

1 个答案:

答案 0 :(得分:1)

不幸的是,您无法通过unset / empty属性过滤查询结果:

来自Index definition and structure

  

仅当实体具有索引值集时,它才包含在索引中   对于索引中使用的每个属性;如果索引定义引用   到该实体没有价值的财产,该实体将不会   出现在索引中,因此将永远不会返回   任何基于索引的查询。

另请参阅相关的AppEngine: Query datastore for records with <missing> value