社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
私信  •  关注

Alex Mamo

Alex Mamo 最近创建的主题
Alex Mamo 最近回复了
6 年前
回复了 Alex Mamo 创建的主题 » 为NoSQL和Flutter复制SQL联接的FireStore

不幸的是,没有 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。

另外,当你复制数据时,有一件事需要记住。以同样的方式添加数据,您需要对其进行维护。换句话说,如果您想要更新/禁止一个项目,您需要在它存在的每一个地方进行更新/禁止。

6 年前
回复了 Alex Mamo 创建的主题 » 如何在NoSQL中建模经典用户->多个关系应用数据

应用程序用例的可能数据库架构可能是:

Firestore-root
   |
   --- users (collection)
   |    |
   |    --- userId (document)
   |         |
   |         --- userName: "John"
   |         |
   |         --- emailAddress: "john@gmail.com"
   |         |
   |         --- uid: "uidOfTheUser"
   |         |
   |         --- //other user data
   |
   --- projects (collection)
         |
         --- projectId (document)
               |
               --- projectName: "ProjectName"
               |
               --- projectId: "projectId"
               |
               --- users: ["uidOfTheUser", "uidOfTheUser"]

使用此数据库模式,您可以简单地:

  • 仅使用 CollectionReference :

    FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
    CollectionReference projectsRef = rootRef.collection("projects");
    projectsRef.get().addOnCompleteListener(/* ... */);
    
  • 获取与单个用户相关的所有项目:

    FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
    Query query = rootRef.collection("projects").whereArrayContains("users", uid);
    query.get().addOnCompleteListener(/* ... */);
    

我们如何将其非规范化?

在这种情况下,不需要对数据进行非规范化。然而,这 denormalization 实践是一种常见的实践,当涉及到消防基地。如果你对noqsl数据库不熟悉,我建议你看这段视频, Denormalization is normal with the Firebase Database 为了更好的理解。它适用于FireBase实时数据库,但同样的规则也适用于云FireStore。

另外,当你复制数据时,有一件事需要记住。以同样的方式添加数据,您需要对其进行维护。换句话说,如果您想要更新/禁止一个项目,您需要在它存在的每一个地方进行更新/禁止。

另请参见:

正如@frankvanpuffelen在他的评论中提到的,请参见以下答案: