仅当 Google 数据存储中不存在密钥时才写入实体

Write entity only if the key isn't present in Google Datastore

我要解决的问题是:我有一个每天生成实体的服务。其中一些实体将是新的,而另一些实体已在之前的 运行.

中找到

我需要:

  1. 使数据库保持最新状态,即包含所有已被发现的实体
  2. 能够判断何时找到新实体。每个实体都包含一个时间戳,所以如果我能确保实体没有被覆盖,这应该不会太难(我将查询数据库中今天找到的实体,这些应该是新实体) ,所以这就是我想要做的。

生成的数据如下所示

[
{"key": "a",
"foo": "bar",
"timestamp": "EXMAPLE_TIMESTAMP" },
{"key": "b",
"foo": "baz",
"timestamp": "EXMAPLE_TIMESTAMP" }
] 

注意:实体具有唯一的数据存储键

编辑:我尝试使用 Put(),但如果实体的键已经存在,它只会覆盖实体,这会导致时间戳被更新,即使实际内容相同。

仅当键不存在时才使用 insert mutation 保存实体。

_, err = client.Mutate(ctx, datastore.NewInsert(key, value))
if merr, ok := err.(datastore.MultiError); ok && merr[0] == codes.AlreadyExists {
    err = nil
}
if err != nil {
    // handle error
}