不幸的是,没有
JOIN
云FireStore或其他NoSQL数据库中的子句。在FireStore中,查询很浅。这意味着它们只从运行查询的集合中获取项。无法在单个查询中从两个顶级集合中获取文档。FireStore不支持一次性跨不同集合的查询。单个查询只能使用单个集合中文档的属性。
所以我能想到的最简单的解决方案是查询数据库以获取
uid
来自的用户
profile
收集。一旦您有了这个ID,就进行另一个数据库调用(在回调中),并从
connection
使用以下查询的集合:
stream: Firestore.instance.collection('connection').where('uid', isEqualTo: "xyc4567").snapshots(),
另一个解决方案是创建名为
连接
在每个用户下添加所有
连接
它下面的对象。这种做法被称为
denormalization
当涉及到火场时,这是一种常见的做法。如果你对noqsl数据库不熟悉,我建议你看这段视频,
Denormalization is normal with the Firebase Database
为了更好的理解。它适用于FireBase实时数据库,但同样的规则也适用于云FireStore。
另外,当你复制数据时,有一件事需要记住。以同样的方式添加数据,您需要对其进行维护。换句话说,如果您想要更新/禁止一个项目,您需要在它存在的每一个地方进行更新/禁止。