我将尝试在Node.js中使用Google Datastore API进行“仅键查询”,就像文档here所示。
在保存多条记录后,我会这样做:
这里返回的空对象数量是给定类型记录的正确数量。但问题在于它们是空对象。我希望在这里获得每个记录的数据存储键。
另一方面,如果我进行“正常”的投影查询,使用“正常”的属性(比如“id”——在通过
在保存多条记录后,我会这样做:
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...
}
所有保存的记录都正确返回。
但是当我执行像这样的“仅键查询”(并且如文档中所示):
const query = datastore.createQuery(kind)
.select('__key__');
datastore.runQuery(query)
.then( (results) => {
// whatever...
}
我results[0]
的返回值只是一个像这样的空对象数组:
results[0]: [ {}, {}, {}, {}, {}, ..., {}]
这里返回的空对象数量是给定类型记录的正确数量。但问题在于它们是空对象。我希望在这里获得每个记录的数据存储键。
另一方面,如果我进行“正常”的投影查询,使用“正常”的属性(比如“id”——在通过
datastore.key[kind, record.id]
定义键后,应该与数据存储键相同),那么我可以正确地检索到投影的“id”属性,如下所示: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
]
我的 "keys-only-query" 怎么出了问题呢?我按照文档描述的方式做了,但是却只得到了空结果。
注意:我只在 Datastore 模拟器中测试过。与AppEngine中一样的结果。