在Cloud Firestore中查找具有特定参考的所有文档

Pet*_*tja 7 javascript firebase google-cloud-firestore

在Cloud Firestore上,我有这样一种方式引用另一个文档的文档:

从集合A到B的参考

在我的例子中,文档Collection A/WJQ9yx67RrqHWQoEp0e2是指文档Collection B/rFOEwdw5go4dbitOCXyC,但当然,可以是无限文档,指的是一个提到的文档.

现在我想找出所有文件Collection A都提到这个非常具体的文件Collection B/rFOEwdw5go4dbitOCXyC.

这怎么可能?我怎么能做到这一点?

Firebase的文档对此有点不清楚.

Gri*_*orr 13

你是对的,遗憾的是没有Reference在文档中实际使用数据类型的例子,实际上只提到它是在支持的数据类型部分.

最终,a Reference可以像Firestore中提供的任何其他数据类型一样使用,因此也可用于过滤和排序数据.

要实现您所追求的目标,您需要构造一个Reference指向文档的内容Collection B,然后使用where子句来过滤数据的referenceCollection A.例如在JavaScript中:

// Create a reference to the specific document you want to search with
var reference = db.collection("Collection B").doc("rFOEwdw5go4dbitOCXyC");

// Construct a query that filters documents matching the reference
var query = db.collection("Collection A").where("reference", "==", reference);
Run Code Online (Sandbox Code Playgroud)

查看Firebase JavaScript SDK中的源代码,isEqual()通过简单地检查路径是否匹配来执行Reference(扩展Query)的比较:

  isEqual(other: Query): boolean {
    // [...]
    const sameRepo = this.repo === other.repo;
    const samePath = this.path.equals(other.path);
    const sameQueryIdentifier =
      this.queryIdentifier() === other.queryIdentifier();

    return sameRepo && samePath && sameQueryIdentifier;
  }
Run Code Online (Sandbox Code Playgroud)

这似乎与调用toString()两者并比较字符串值非常相似.

我昨天制作了一个类似的例子,它引导我测试存储a的可能用途Reference,所以这也适用于此.