我正在尝试进行"仅限密钥查询"使用适用于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相同。
答案 0 :(得分:5)
对象不是为空,而是仅包含数据存储区键,这些键存储在符号属性datastore.KEY
下。在javascript中,默认情况下可能不会输出符号属性。
您可以使用符号datastore.KEY
var keys = results.map(function(res) {
return res[datastore.KEY];
});