属性__key__对于节点为空

时间:2017-05-29 14:40:39

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

我创建了一个简单的数据存储区(项目),其中包含一个字符串属性(名称)和一些示例数据集。

当我使用gql时,我可以选择__key__并可以通过__key__属性进行查询。

但是当我从nodejs中选择数据时,__key__属性为空。

问题

设置:

const datastore = require('@google-cloud/datastore')({
  projectId: 'my-project',
  keyFilename: `path/to/keyfile.json`
});

无法正常工作:选择仅使用纯密钥查询的所有数据集:

const query = datastore.createQuery('Projects').select('__key__');

datastore.runQuery(query).then( results => {

  console.log('RESULTS:', results[0]);
})

结果:

RESULTS: [ {}, {}, {} ]

普通查询按预期工作:

datastore.runQuery(query).then( results => {

  console.log('RESULTS:', results[0]);
})

..但是这里也缺少__key__属性:

RESULTS: [ { name: 'Test Projekt 1' },
  { name: 'Test Projekt 2' },
  { name: 'Test Projekt 3' } ]

问题

如何正确选择__key__模块的@google-cloud/datastore属性?

1 个答案:

答案 0 :(得分:1)

我对Node不熟悉,但在API doc中找到了以下示例代码。也许它会有所帮助:

  

仅密钥查询仅返回结果实体的键   实体本身,延迟和成本较低。

var keysOnlyQuery = datastore.createQuery('Lion').select('__key__');

datastore.runQuery(keysOnlyQuery, function(err, entities) {
  var keys = entities.map(function(entity) {
    return entity[datastore.KEY];
  });
});
  

如果省略回调,我们将返回一个Promise。

datastore.runQuery(query).then(function(data) {
  var entities = data[0];
});