猿问

GAE Datastore (Golang):添加新数据库字段时过滤查询

我正在运行一个与datastore. 我有一个结构,可以转换为 上的数据库模型datastore,并且我在结构中添加了一个新字段,将其称为NewField(类型string)


该结构的现有实例(数据库中的“行”)NewField当然缺少这种情况,这是意料之中的。


我正在寻找创建一个查询,该查询将返回所有NewField缺少此内容的实例(现有实例)。


这是我尝试过的:


q := datastore.NewQuery("MyModel")

q = q.Filter("NewField =", "")

但是,这似乎不起作用。


关于如何实现这一目标的任何想法?


收到一只叮咚
浏览 293回答 1
1回答

紫衣仙女

坏消息是你不能。GAE Datastore 上的每个查询都对索引进行操作。由于您刚刚添加了新属性,因此没有该属性的现有实体将不会出现在任何索引中(包括该属性)。您需要的是遍历没有索引记录的实体,但这是不可能的。最好的办法是查询所有实体,并在 Go 代码中手动进行过滤/更新,其中NewField字段的值为零。重新保存现有实体后,新属性将被编入索引,您将来可以按该属性搜索/过滤。如果您的实体有任何机会存储创建时间或上次更新时间(在属性中),那么您可以使用:按上次更新时间过滤以仅列出时间戳小于您将新属性添加到的时间的实体你的 Go 模型。另一种选择(用于将来的更改)是"version"向您的实体添加属性。每当您执行模型更新时,都会增加新实体的版本。而且您始终可以使用旧版本(或特定版本)查询实体。
随时随地看视频慕课网APP

相关分类

Go
我要回答