web-dev-qa-db-ja.com

Firestoreの「参照」タイプのフィールドによるクエリ

IDが5gF5FqRPvdroRF8isOwdの単一のドキュメントを含む「categories」というコレクションがあります。

「チケット」と呼ばれる別のコレクションがあります。各チケットには、チケットを特定のカテゴリに割り当てる参照フィールドがあります。

チケットコレクションのフィールドは「カテゴリ」と呼ばれ、referenceのフィールドタイプを持ちます。

以下のコードでは、categoryDocIdはクエリを実行するカテゴリのドキュメントIDです。

const categoryDocID = `5gF5FqRPvdroRF8isOwd`;

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

どして files.length 0を返しますか?

テストのために、categoryフィールドタイプを文字列に変更し、直接参照ではなくカテゴリIDに設定しました。これにより、カテゴリに割り当てられたチケットが正しく返されたため、referenceフィールドのクエリ方法に関するものであると思われます。

8
jskidd3

ドキュメントで here を読みますが、参照データ型は 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();
26
Renaud Tarnec