Firestore中的数据组织

本文概述

  • 馆藏
  • 子集合
  • 根级集合
【Firestore中的数据组织】Cloud Firestore是一个NoSQL, 面向文档的数据库。没有表或行, 数据存储在文档中, 这些文档被组织为集合。每个文档都包含一组用于标识文档的键值对。这些键值对已针对存储大量小文档进行了优化。
Firestore中的数据组织

文章图片
所有文档必须存储在集合中。文档可以包含子集合和嵌套对象, 其中可以包括诸如字符串之类的原始字段或诸如列表之类的复杂对象。
文档是一个轻量级记录, 其中包含一个字段, 该字段映射到值。名称标识每个文档, 我们可以将文档视为轻量级JSON记录。
srastogifirst: "Shubham"last: "Rastogi"born: 1997

文档中复杂的嵌套对象称为地图。
srastoginame: first: "Shubham"last: "Rastogi"born: 1997

馆藏 文档驻留在集合中, 集合是非常简单的文档容器。集合是无架构的。对于放置在每个文档中的字段和存储在这些字段中的数据类型, 我们拥有自由。同一集合中的文档可以包含并存储不同的字段以及这些字段中的不同类型的数据。
  • 集合包含文档, 仅此而已。
  • 它不能直接包含带值的原始字段。
  • 它不能包含其他集合。
  • 集合中文档的名称是唯一的。
  • 我们可以提供我们的密钥, 例如用户ID。
  • 我们可以允许Cloud Firestore自动为我们创建随机ID。
  • 无需创建或删除集合。
  • 当我们创建第一个文档时, 该集合存在。
  • 如果删除集合中的所有文档, 则该集合将不再存在。
//Colectionusers //Document 1 srastogifirst : "Shubham"last : "Rastogi"born : 1997 //Document 2araifirst : "Arpita"last : "Rai"born : 1997

子集合 子集合是与特定文档关联的集合。我们可以为房间集合中的每个房间文档创建一个称为消息的子集合。
//ColeectionRooms //Document 1 roomAname: "my chat room"messages//Sub-collection 1message1from : "Shubham"msg : "www.srcmini.com"//Sub-collection 2message2... //Document 2roomB ...

在Cloud Firestore中构建数据时, 我们有以下选择
  • 文件资料
  • 多个收藏
  • 文档中的子集合。
我们可以在文档中嵌套诸如数组或映射之类的复杂对象。如果我们有一个简单的固定数据列表, 则可以轻松设置和简化数据结构。文档随着列表的增加或增长而增长, 这可能导致文档检索时间变慢。因此, 它不能作为另一种选择进行扩展。
当我们拥有可能随时间扩展的数据时, 我们可以在文档中创建集合。随着列表的增加, 父文档的大小不会更改, 并且还会获得子集合的完整查询功能。子集合有一个缺点或局限性, 即我们不能轻易删除子集合。

//CollectionScience //Document softwarename : "software chat"//Sub-collectionusers//Document srastogifirst: "Shubham"last : "Rastogi"//Document prastogifirst: "Pearl"last : "Rastogi"//Documentoptics physics...

根级集合 在根级别的集合中, 我们在数据库的根级别创建集合以组织不同的数据集。

//Collectionusers//Document srastogifirst : "Shubham"last : "Rastogi"born : 1997//Document prastogifirst : "Pearl"last : "Rastogi"born : 1997//Another root level collection rooms //Document software//Sub-collectionmessages//Documentmessage1from : "srastogi"content : "..."//Documentmessage2from : "srastogi"content : "..."

  • 每个文档通过其在数据库中的位置进行唯一标识:
val srastogiDocumentRef=db.collection("users").document("srastogi")

  • 我们还可以创建对集合的引用
val usersCollectionRef=db.collection("users")

  • 我们还可以通过将路径指定为字符串来创建引用。路径组件由正斜杠(/)分隔。
val srastogiDocumentRef=db.document("users/srastogi")


在子集合中创建对消息的引用
val messageRef=dp.collection("rooms").document("roomA").collection("messages").document("message1")

    推荐阅读