2017-05-26 66 views
3

我正在嘗試使用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中的結果相同。

回答

3

可以使用符號datastore.KEY

var keys = results.map(function(res) { 
    return res[datastore.KEY]; 
}); 
+1

由於得到實體鍵!我知道它顯然與一個叫做「符號」的javascript有關,https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Symbol。我認爲數據存儲。 KEY屬性就是這樣一個「符號」,這就是爲什麼它沒有在正常的對象表示中顯示,或者類似的東西(或者完全不同),也許我會在我真正理解時添加一些信息。 – trollkotze

相關問題