web-dev-qa-db-fra.com

Interrogation par un champ de type 'référence' dans Firestore

J'ai une collection appelée "catégories" contenant un seul document avec l'ID: 5gF5FqRPvdroRF8isOwd.

J'ai une autre collection appelée "tickets". Chaque ticket a un champ de référence qui attribue le ticket à une catégorie particulière.

Le champ de la collection de tickets est appelé "catégorie" et a un type de champ reference.

Dans le code ci-dessous, categoryDocId est l'ID de document de la catégorie que je souhaite interroger.

const categoryDocID = `5gF5FqRPvdroRF8isOwd`;

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

Pourquoi files.length retourne 0?

Pour les tests, j'ai changé le type de champ category en chaîne et l'ai défini sur l'ID de catégorie au lieu d'une référence directe. Cela a renvoyé correctement les tickets affectés à la catégorie, ce qui m'amène à croire que c'est quelque chose sur la façon dont je recherche un champ reference.

8
jskidd3

Comme vous le lirez ici dans le document, le type de données de référence est utilisé pour stocker DocumentReferences .

Si vous souhaitez l'utiliser dans une requête, vous ne pouvez pas utiliser une simple chaîne, ni l'UID du document (c'est-à-dire '5gF5FqRPvdroRF8isOwd'), ni la valeur de chaîne stockée dans le champ (c'est-à-dire '/categories/5gF5FqRPvdroRF8isOwd').

Vous devez créer un DocumentReference et l'utiliser dans votre requête, comme suit:

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

const files = await firebase
  .firestore()
  .collection('tickets')
  .where('category', '==', categoryDocRef)
  .get();
26
Renaud Tarnec