在交易中获取实体的ID

时间:2017-04-13 06:04:15

标签: google-app-engine google-cloud-datastore datastore koa2 google-cloud-node

我有一个数据存储区事务,我在其中创建一个实体(用户),让数据存储区为我生成ID。

然后我想使用该ID,以便我可以创建另一个实体(另一种)。

虽然这可以通过常规数据存储来保存' API:

datastore.save(user).then(() => {
  userId = user.key.id // returns entity's ID created by datastore
})

但是,使用交易时似乎无法做到这一点:

transaction.save(user).then(() => {
  console.log( user.key.id )
})

以上输出"无法读取'然后'未定义的'", 即使docs中没有列出回调,我还是试过了。

使用交易创建/保存实体时,如何检索该实体的自动生成ID?

1 个答案:

答案 0 :(得分:2)

分配ID

您可以在输入交易前使用Method: projects.allocateIds

  

为给定键分配ID,这对于在插入实体之前引用该实体非常有用。

Using the Python client library

这将使数据存储'保留' ID(即使仍然不会成为使用这些ID创建的任何实体)并在插入之前避免ID冲突。

在您的交易中,您从分配的ID中获取一个ID并分配给第一个实体。然后,即使在事务提交第一个实体插入之前,您也可以在第二个实体中引用相同的ID。

交易的最佳做法

  

事务的最长持续时间为60秒,30秒后的空闲到期时间为10秒。

因此,最佳做法是在输入交易之前执行所有可能的操作。当然,分配ID是您在交易之前可以运行的事情之一。