在Cloud Firestore

时间:2017-10-25 13:44:47

标签: javascript firebase google-cloud-firestore

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

Reference from collection A to B

在我的示例中,文档Collection A/WJQ9yx67RrqHWQoEp0e2指的是文档Collection B/rFOEwdw5go4dbitOCXyC,但当然可以是无限文档,指的是提及的文档。

现在,我想找出Collection A的所有文档,这些文档都是指这个非常具体的文档Collection B/rFOEwdw5go4dbitOCXyC

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

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

1 个答案:

答案 0 :(得分:9)

你是对的,遗憾的是没有在文档中实际使用Reference数据类型的例子,实际上只提到它是{{3} }。

最终,Reference可以像Firestore中提供的任何其他数据类型一样使用,因此可以用来过滤&排序数据。

要实现您的目标,您需要构建Reference指向Collection B中的文档,然后使用where子句过滤数据reference的{​​{1}}值。例如,在JavaScript中:

Collection A

查看Supported Data Types section,只需检查路径是否匹配即可比较// 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); (扩展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; } 并比较字符串值非常相似。

我昨天制作了一个source for isEqual() in the Firebase JavaScript SDK,这导致我测试了存储toString()的可能用途,因此这也适用于此。