我正在嘗試使用Node.js的Google Datastore API執行「僅鍵查詢」,如文檔here 。如何在Google Cloud Datastore(Node.js)中執行「keys-only-query」
我這樣做,以後有救了這樣的多項紀錄:
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...
}
將所有保存的記錄正確地返回。
但是,當我做了一個「純鍵查詢」像這樣的(和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」屬性中正確這樣的:
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
]
那麼,什麼是錯我的「純鍵查詢」?我完全按照文檔描述的方式完成了它。但我只能得到空的結果。
注意:我已經在Datastore模擬器中測試過這個。數據存儲模擬器中的結果與AppEngine中的結果相同。
由於得到實體鍵!我知道它顯然與一個叫做「符號」的javascript有關,https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Symbol。我認爲數據存儲。 KEY屬性就是這樣一個「符號」,這就是爲什麼它沒有在正常的對象表示中顯示,或者類似的東西(或者完全不同),也許我會在我真正理解時添加一些信息。 – trollkotze