簡體   English   中英

如何在Google Cloud Datastore(Node.js)中執行“僅鍵查詢”

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM