在Firestore中按类型为“引用”的字段进行查询

时间:2018-11-04 12:40:38

标签: javascript firebase google-cloud-firestore

我有一个名为“类别”的集合,其中包含一个ID为5gF5FqRPvdroRF8isOwd的单个文档。

我还有另一个收藏集,叫做“门票”。每张票证都有一个参考字段,用于将票证分配到特定类别。

门票集合中的字段称为“类别”,字段类型为reference

在下面的代码中,categoryDocId是我要查询的类别的文档ID。

const categoryDocID = `5gF5FqRPvdroRF8isOwd`;

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

为什么files.length返回0?

为了进行测试,我将category字段类型更改为字符串,并将其设置为类别ID而不是直接引用。正确返回了分配给该类别的票证,这使我相信这与我如何查询reference字段有关。

2 个答案:

答案 0 :(得分:12)

正如您将在文档中阅读here一样,参考数据类型用于存储DocumentReferences

如果要在查询中使用它,则不能使用简单的字符串,既不能使用文档的UID(即'5gF5FqRPvdroRF8isOwd'),也不能使用字段中存储的字符串值(即{{1 }}。

您必须构建一个DocumentReference并在查询中使用它,如下所示:

'/categories/5gF5FqRPvdroRF8isOwd'

答案 1 :(得分:0)

以下是我使用引用类型查询集合的方法(node.js + typescript):

let myCollectionADocument = await admin.firestore().collection("collection_a").doc("documentId").get();
let myCollectionB = await admin.firestore().collection("collection_b").where("collection_a_id", "==", myCollectionADocument.ref).get();