GAE Datastore (Golang): Filter Query When Adding New DB Fiel



我正在运行与datastore一起工作的GAE Golang应用程序。我有一个结构体转换为datastore上的DB模型,并且我在结构体中添加了一个新字段,称为NewField(类型string)

该结构体的现有实例(DB中的"行")当然缺少NewField,这是预期的。

我正在寻找创建一个查询,将返回所有实例,其中这个NewField是缺失的(现有的实例)。

这是我尝试过的:

q := datastore.NewQuery("MyModel")
q = q.Filter("NewField =", "")

然而,这似乎不起作用。

对如何实现这一点有什么想法吗?

坏消息是你不能。

GAE Datastore上的每个查询都在索引上操作。由于您刚刚添加了新属性,没有该属性的现有实体将不会出现在任何索引(包括该属性)中。您需要的是遍历没有索引记录的实体,但这是不可能的。

您最好的选择是查询所有实体,并在Go代码中手动执行过滤/更新,其中NewField字段具有零值。一旦您重新保存现有的实体,新的属性将被索引,并且您将能够在将来通过该属性进行搜索/过滤。

如果你的实体碰巧存储了创建时间或最后更新时间(在属性中),那么你可以使用:filter by last updated time来列出时间戳小于你将新属性添加到Go模型的时间的实体。

另一个选项(用于将来的更改)是向实体添加"version"属性。无论何时执行模型更新,都要增加新实体的版本。并且,您始终可以查询旧版本(或特定版本)的实体。

最新更新