2017-05-26 10 views
3

Google Datastore API for Node.jsで「キーのみのクエリ」を実行しようとしています。ドキュメント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

感謝を使用してエンティティのキ​​ーを取得することができます! (私はそれが明らかに "Symbol"と呼ばれるjavascriptのものと関係があることを知っています、https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Symbol。私はデータストアだと思います。 KEYプロパティは "Symbol"なので、通常のオブジェクト表現では表示されませんし、そうでない場合(まったく違う場合もあります)、実際に理解すると、その情報が追加されます。 – trollkotze

関連する問題