Google app engine 在Google Apps Engine中,是否有可能有效地过滤出没有为TextProperty类型的属性设置值的实体?怎么用?

Google app engine 在Google Apps Engine中,是否有可能有效地过滤出没有为TextProperty类型的属性设置值的实体?怎么用?,google-app-engine,google-cloud-datastore,Google App Engine,Google Cloud Datastore,我最近不得不将模型的一个属性从typeStringProperty更新为TextProperty,以克服限制性限制(最多500个字符)。这不是问题,直到我意识到我的一些老问题,如: SomeEntity.gql('其中属性1!=:1',无) 其中property1是模型中无法工作的属性:-( 该查询以前是有效的,它确实帮助我只获取那些为property1设置了值的实体 在这种类型为TextProperty的情况下,如何有效地获得相同的结果?您不能对TextProperty进行筛选或排序。要实现您

我最近不得不将模型的一个属性从type
StringProperty
更新为
TextProperty
,以克服限制性限制(最多500个字符)。这不是问题,直到我意识到我的一些老问题,如:

SomeEntity.gql('其中属性1!=:1',无)

其中
property1
是模型中无法工作的属性:-(

该查询以前是有效的,它确实帮助我只获取那些为
property1
设置了值的实体


在这种类型为
TextProperty
的情况下,如何有效地获得相同的结果?

您不能对TextProperty进行筛选或排序。要实现您想要做的,请添加一个新的BooleanProperty“has_text”并对其进行筛选。然后,只要确保在更改TextProperty时设置BooleanProperty即可。


此解决方案遵循Google App Engine的一般惯例,即预先计算要筛选的所有内容。

如果您使用ndb,则添加a通常是执行任何查询的最佳方式,否则无法轻松表示谁的筛选器。请注意,在添加新属性后,必须重新放置每个实体才能使索引正常工作(这也适用于之前推荐的布尔属性)

还请注意,使用!=here:!=转换为两个查询是没有意义的,一个使用<,一个使用>。因为没有一个是最小的可能值,所以您也可以使用>。当然,这是有效的。我想探索任何未记录的可能解决此问题的黑客。