我正在使用relay/graphql/googlecloud设置来为一个可以免疫保存数据的项目进行设置。
我有一组字段,每次修改任何字段时都会创建一个新记录,其结构如下:
Project
- Start Date
- End Date
- Description
- ...
- ...
第一次创建项目时,会保存一个时间戳和一个版本号。例如:
1470065550-1
之后的任何修改都会创建一个新的版本号,但仍然使用相同的时间戳。
1470065550-2
记住它是不可变的,一个项目可能会有很多版本。如果还有很多项目,这可能会导致提取大量记录
如果我想从数据存储中获取一个项目列表,只返回每个项目的最新版本,那么最好的方法是什么?随着版本号的增加,我永远不知道哪一个是最新的。
例如,如果我有包含2个项目的行,这两个项目都有多个版本,并且我想获取每个项目的最新版本:
1470065550-1
1470065550-2
1470065550-3
1470065550-4
1470065550-5
1470065550-6
1470065550-7 <--- Current Version for 1470065550
1567789887-1
1567789887-2
1567789887-3 <--- Current Version for 1567789887
根据上面的行,我需要查询来返回两个项目的最新版本:
1470065550-7 <--- Current Version for 1470065550
1567789887-3 <--- Current Version for 1567789887
您可能想将标记更改为[google cloud datastore],而不是[google cloudstorage],因为您可能缺少真正的数据存储专家。
但我只想对你的问题说两点:添加一个"current"字段,然后使用事务来自动切换它可能是最简单的。然后,它是一个易于在任何其他查询中使用的过滤器。
如果你不能做到这一点,那么回答你的问题有点棘手,因为你还没有给我们你正在构建的查询来获得这组结果。获得最大值的典型方法是排序并设置1的限制,如下所示:
var query = datastore
.createQuery('Projects')
.order('timestamp')
.limit(1);
但考虑到您存储数据的方式,我认为当您从-9运行到-10时无法做到这一点,因为在字典排序中,-10通常在-9之前(然而,我没有检查这在数据存储中是如何工作的)。你可能需要零垫。