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