[英]How to do a “keys-only-query” in Google Cloud Datastore (Node.js)
我試圖做一個“純鍵查詢”與谷歌的數據存儲API對Node.js的,如文檔中的例子在這里 。
保存了許多這樣的記錄后,我便這樣做了:
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]: [ {}, {}, {}, {}, {}, ..., {}]
此處返回的空對象數是給定類型的正確記錄數。 但是問題在於它們是空對象。 我希望在這里獲得每個記錄的數據存儲區密鑰。
另一方面,如果我在通過datastore.key[kind, record.id]
定義鍵之后,對“正常”屬性(例如“ 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
]
那么我的“僅鍵查詢”怎么了? 我完全按照文檔描述的方式進行了操作。 但是我只得到空結果。
注意: 我僅在數據存儲模擬器中對此進行了測試。 數據存儲區模擬器中的結果與AppEngine中的結果相同。
這些對象不是空的,而是僅包含數據存儲區鍵,這些鍵存儲在符號屬性datastore.KEY
。 在javascript中,默認情況下可能不會輸出符號屬性。
您可以使用符號datastore.KEY
獲取實體密鑰。
var keys = results.map(function(res) {
return res[datastore.KEY];
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.