📜  Firestore中的Firebase数据组织

📅  最后修改于: 2021-01-02 03:42:00             🧑  作者: Mango

Firestore中的数据组织

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

所有文档必须存储在集合中。文档可以包含子集合和嵌套对象,其中可以包括诸如字符串之类的原始字段或诸如列表之类的复杂对象。

文档是一个轻量级记录,其中包含一个字段,该字段映射到值。名称标识每个文档,我们可以将文档视为轻量级JSON记录。

srastogi
first: "Shubham"
last: "Rastogi"
born: 1997 

文档中复杂的嵌套对象称为地图。

srastogi
name: 
        first: "Shubham"
             last: "Rastogi"
             born: 1997

馆藏

文档驻留在集合中,集合是非常简单的文档容器。集合是无架构的。我们对放入每个文档中的字段和存储在这些字段中的数据类型具有自由。同一集合中的文档可以包含并存储不同的字段以及这些字段中的不同类型的数据。

  • 集合包含文档,仅此而已。
  • 它不能直接包含带值的原始字段。
  • 它不能包含其他集合。
  • 集合中文档的名称是唯一的。
  • 我们可以提供我们的密钥,例如用户ID。
  • 我们可以允许Cloud Firestore自动为我们创建随机ID。
  • 无需创建或删除集合。
  • 当我们创建第一个文档时,该集合存在。
  • 如果删除集合中的所有文档,则该集合将不再存在。
//Colection
users
    //Document 1
    srastogi
        first : "Shubham"
        last : "Rastogi"
        born : 1997
    //Document 2
arai
        first : "Arpita"
        last : "Rai"
        born : 1997

子集合

子集合是与特定文档关联的集合。我们可以为房间集合中的每个房间文档创建一个称为消息的子集合。

//Coleection
Rooms
    //Document 1
    roomA
        name: "my chat room"
            messages
                //Sub-collection 1
                                 message1
                    from : "Shubham"
                    msg : "www.javatpoint.com"
                //Sub-collection 2
                             message2
                    ...
    //Document 2
roomB
    ...

在Cloud Firestore中构建数据时,我们有以下选择

  • 文件资料
  • 多个收藏
  • 文档中的子集合。

我们可以在文档中嵌套诸如数组或映射之类的复杂对象。如果我们有一个简单的固定数据列表,则可以轻松设置和简化数据结构。文档会随着列表的增加或增长而增长,这会导致文档检索时间变慢。因此,它不能作为另一种选择进行扩展。

当我们拥有可能随时间扩展的数据时,我们可以在文档内创建集合。随着列表的增加,父文档的大小不会更改,并且还会获得对子集合的完整查询功能。子集合有一个缺点或局限性,即我们不能轻易删除子集合。

//Collection
Science
    //Document
    software
        name : "software chat"
                         //Sub-collection
        users
            //Document 
                                     srastogi
                first: "Shubham"
                last : "Rastogi"
                                     //Document 
                        prastogi
                first: "Pearl"
                last : "Rastogi"

//Document
optics physics
...

根级集合

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

//Collection
users
             //Document 
    srastogi
        first : "Shubham"
        last : "Rastogi"
            born : 1997

//Document
    prastogi
        first : "Pearl"
        last : "Rastogi"
            born : 1997
//Another root level collection 
rooms
    //Document
    software
        //Sub-collection
        messages
            //Document
            message1
                from : "srastogi"
                content : "..."
            //Document
                         message2
                from : "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")