Запросы по полю с типом «ссылка» в Firestore - PullRequest
0 голосов
/ 04 ноября 2018

У меня есть коллекция под названием «категории», содержащая один документ с идентификатором: 5gF5FqRPvdroRF8isOwd.

У меня есть еще одна коллекция под названием 'tickets'. Каждый билет имеет поле ссылки, которое назначает билет определенной категории.

Поле в коллекции билетов называется «категория» и имеет тип поля reference.

В приведенном ниже коде categoryDocId - это идентификатор документа категории, по которой я хочу запросить.

const categoryDocID = `5gF5FqRPvdroRF8isOwd`;

const files = await firebase
  .firestore()
  .collection('tickets')
  .where('category', '==', categoryDocID)
  .get();

Почему files.length возвращает 0?

Для тестирования я изменил тип поля category на строку и присвоил ему идентификатор категории вместо прямой ссылки. Это правильно вернуло билеты, приписанные к категории, что заставляет меня поверить, что это что-то о том, как я запрашиваю поле reference.

1 Ответ

0 голосов
/ 04 ноября 2018

Как вы прочтете здесь в документе, справочный тип данных используется для хранения DocumentReferences .

Если вы хотите использовать его в запросе, вы не можете использовать простую строку, ни UID документа (например, '5gF5FqRPvdroRF8isOwd'), ни строковое значение, которое хранится в поле (например, '/categories/5gF5FqRPvdroRF8isOwd').

Вы должны создать DocumentReference и использовать его в своем запросе следующим образом:

const categoryDocRef = firebase.firestore()
   .collection('categories')
   .doc('5gF5FqRPvdroRF8isOwd');

const files = await firebase
  .firestore()
  .collection('tickets')
  .where('category', '==', categoryDocRef)
  .get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...