Я использую Google Cloud Datastore для хранения объектов с сгенерированным идентификатором Datastore в качестве первичного ключа.Кроме того, я сохраняю другие свойства для каждой сущности, в этом примере owner
.
Сущность выглядит в консоли Google Cloud Datastore следующим образом:
|Name/ID |owner |...|
|id=5657437197565952 |5634472569470976|...|
Затем я хочу отфильтроватьобъекты, основанные на key (id)
и свойстве owner
.
. Для этого я понимаю, что мне нужен составной индекс, чтобы иметь возможность фильтровать оба поля (id) и владельца одновременно.Поэтому я создал составной индекс, используя следующий файл index.yaml
:
indexes:
- kind: job
ancestor: no
properties:
- name: __key__
- name: owner
# AUTOGENERATED
Индекс отображается в облачной консоли, и если я фильтрую оба поля с помощью пользовательского интерфейса облачной консоли, он фильтрует правильную сущность вТаблица.Фильтр, который я там использую:
- Ключ точно такой же, как:
key(job,5657437197565952)
- Владелец равен строке:
5634472569470976
Нокогда я пытаюсь получить эту сущность с помощью библиотеки Node.js от Google, используя следующий код, я не получаю никакого результата:
const {Datastore} = require('@google-cloud/datastore');
async function quickStart() {
const projectId = 'myproject';
// Creates a client
const datastore = new Datastore({
projectId: projectId,
});
const keySelector = datastore.key(['myentity', '5657437197565952']);
const query = datastore.createQuery('myentity').filter('key', keySelector).filter('owner', '=', '5634472569470976');
const val = await query.run((err, entities, info) => {
console.log(entities);
});
console.log('Got ' + val);
}
quickStart().catch(console.error);
entities
пустые и val
- это просто следующееесли строка:
[[],{"moreResults":"NO_MORE_RESULTS","endCursor":"CgA="}]
Я также пытался создать другой индекс с именем id
вместо __key__
, но безуспешно.
Мой вопрос сейчас: какой составной индекс делатьМне нужно выполнить этот фильтр для обоих полей, чтобы код NodeJS также правильно извлекал сущность?