从 Google Cloud Datastore 中删除实体

Jud*_*orn 2 datastore node.js google-cloud-platform

我在使用 node.js 从 Google Cloud Datastore 中删除实体时遇到问题。我怀疑我错过了一些非常基本的东西,因为这应该不难。

我仅根据此文档获取密钥:

const query = datastore.createQuery('coin').select('__key__');
Run Code Online (Sandbox Code Playgroud)

运行查询:

const [keys] = await datastore.runQuery(query);
Run Code Online (Sandbox Code Playgroud)

根据本文档按键删除生成的实体:

datastore.delete(keys);
Run Code Online (Sandbox Code Playgroud)

但我得到“InvalidKey:密钥应该至少包含一种”。

如果我在运行查询后立即执行 console.log(keys) ,则确实会出现一个有效类型的关键结果数组:

 [
  {
    [Symbol(KEY)]: Key {
      namespace: undefined,
      id: '5083500323536896',
      kind: 'coin',
      path: [Getter]
    }
  },
  {
    [Symbol(KEY)]: Key {
      namespace: undefined,
      id: '5130717650485248',
      kind: 'coin',
      path: [Getter]
    }
  },
etc...
Run Code Online (Sandbox Code Playgroud)

上面不是数组 .delete() 所期望的吗?

Jud*_*orn 5

感谢这篇文章,我意识到仅键查询的结果不是键数组,而是存储在符号属性下的键数组。现在当我查看输出时,这一点很明显,但它太出乎我的意料,我没有想到这一点。

因此,为了对键数组运行 delete(),我需要从每个结果中提取键,如下所示:

const justTheKeys = keys.map(function(res) {
     return res[datastore.KEY];
});
Run Code Online (Sandbox Code Playgroud)

然后我终于可以删除实体了:

datastore.delete(justTheKeys);
Run Code Online (Sandbox Code Playgroud)