如何进行" key-only-query"在Google Cloud Datastore(Node.js)中

时间:2017-05-26 13:07:05

标签: node.js google-app-engine google-cloud-datastore

我正在尝试进行"仅限密钥查询"使用适用于Node.js的Google Datastore API,如文档here中所示。

我保存了许多这样的记录之后就这样做了:

datastore.save(
  records.map(
    (record) => {
      return {
        key: datastore.key([kind, record.id]),
        data: record,
      };
    }
  )

常量kind是一个字符串。每个record都有一个有效的唯一id属性(一个数字),如此处所示,它也应该作为数据存储区密钥标识符。

记录存储正确。通过

,我可以毫无问题地检索它们
datastore.runQuery(datastore.createQuery(kind))
.then( (results) => {
    // whatever...
}

正确返回所有已保存的记录。

但是,当我进行"仅限密钥查询时#34;像这样(和as exemplified in the documentation):

const query = datastore.createQuery(kind)
  .select('__key__');
datastore.runQuery(query)
.then( (results) => {
    // whatever...
}

我的results[0]返回值只是一个空对象数组,如下所示:

results[0]: [ {}, {}, {}, {}, {}, ..., {}]

此处返回的空对象数是给定种类的正确记录数。但问题是它们是空物。我希望在这里获得每条记录的数据存储区密钥。

另一方面,如果我做了正常的"投影查询,在"普通"属性(例如" id" - 应该与数据存储区密钥相同,据我所知,在通过datastore.key[kind, record.id]定义了密钥后),我检索了预计的" id&# 34;因此属性正确:

const query = datastore.createQuery(kind)
  .select('id');
datastore.runQuery(query)
.then( (results) => {
    // whatever...
}

结果:

results[0]: [ 
  { id: 5289385927 },
  { id: 5483575687 },
  { id: 5540575111 },
  { id: 5540622279 },
  // ... and so on
]

那么我的" key-only-query&#34 ;?出了什么问题?我完全按照文档描述的方式完成了它。但我只得到空洞的结果。

注意: 我仅在数据存储模拟器中对此进行了测试。数据存储模拟器中的结果与AppEngine相同。

1 个答案:

答案 0 :(得分:5)

对象不是为空,而是仅包含数据存储区键,这些键存储在符号属性datastore.KEY下。在javascript中,默认情况下可能不会输出符号属性。

您可以使用符号datastore.KEY

获取实体密钥
var keys = results.map(function(res) {
     return res[datastore.KEY];
});