使用Google Cloud Datastore查询返回每条记录的当前版本

时间:2016-08-01 15:53:44

标签: google-cloud-storage google-cloud-datastore

我正在使用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

1 个答案:

答案 0 :(得分:0)

您可能希望将您的代码更改为[google-cloud-datastore]而不是[google-cloud-storage],因为您可能错过了真正的数据存储专家。

但只是在你的问题上提出我的两分钱:为#34; current&#34;添加一个字段可能是最容易的。然后使用事务以原子方式切换它。然后它是一个简单的过滤器,可用于任何其他查询。

如果你不能这样做,回答你的问题有点棘手,因为你没有给我们提供你正在构建的查询以获得这组结果。获得最大值的典型方法是排序并设置限制为1,如下所示:

var query = datastore
   .createQuery('Projects')
   .order('timestamp')
   .limit(1);

但考虑到你存储数据的方式,我不认为你可以在-9到-10之间执行此操作,因为-10通常在-9之前的字典排序(我没有&#39) ;但是,检查它在数据存储区中的工作原理。你可能需要零填充。