数据模型

Cloud Firestore 是一种基于文档的 NoSQL 数据库。与 SQL 数据库不同的是,它没有表或行的概念,而是将数据存储在文档中,并将文档组织为集合。

每个文档包含一组键值对。Cloud Firestore 经过优化,可用于存储小型文档的大型集合。

所有文档都必须存储在集合中。文档可以包含子集合和嵌套对象,两者都可以包含基本字段(如字符串)或复杂对象(如列表)。

集合和文档是在 Cloud Firestore 中隐式创建的。 只需将数据分配给集合中的文档即可。如果集合或文档不存在,Cloud Firestore 会创建一个。

文档

在 Cloud Firestore 中,存储单元是文档。文档是一个轻量级记录,包含映射到值的字段。每个文档都用一个名称进行标识。

代表用户 alovelace 的文档可能如下所示:

  • alovelace

first : "Ada" last : "Lovelace" born : 1815

文档中的复杂嵌套对象称为映射 (map)。例如,您可以使用映射来设计上例中用户姓名的结构,如下所示:

  • alovelace

name :     first : "Ada"     last : "Lovelace" born : 1815

您可能会注意到,文档看起来很像 JSON。它们其实基本上就是 JSON,但有稍许差异(例如,文档支持额外的数据类型,大小限制为文档大小限制),但总体而言,您可以将文档视为轻量级 JSON 记录。

集合

数据模型 - 图1

文档存在于集合中,简单来说,集合就是文档的容器。例如,您可以使用 users 集合来容纳您的各个用户,每个用户用一个文档来表示:

  • 位用户

  • alovelace

    first : "Ada" last : "Lovelace" born : 1815 - aturing

    first : "Alan" last : "Turing" born : 1912

Cloud Firestore 是无架构的,因此您可以自由选择在每个文档中设置什么字段,以及在这些字段中存储什么数据类型。同一集合中的文档可以全部包含不同的字段,或者在这些字段中存储不同类型的数据。但比较好的做法是在多个文档中使用相同的字段和数据类型,以便您可以更轻松地查询文档。

集合只包含文档,不包含任何其他内容。它不能直接包含带有值的原始字段,也不能包含其他集合。(如需了解如何在 Cloud Firestore 中设计更复杂数据的结构,请参阅分层数据。)

在同一个集合中,每个文档的名称都各不相同。您可以提供自己的键(例如用户 ID),也可以让 Cloud Firestore 自动为您创建随机 ID。

您无需“创建”或“删除”集合。在集合中创建第一个文档之后,集合才会存在。如果删除集合中的所有文档,集合将不再存在。

引用

Cloud Firestore 中的每个文档都通过其在数据库中的位置唯一进行标识。之前的示例展示了集合 users 中的文档 alovelace。如需在代码中引用此位置,您可以创建一个指向此位置的引用。

Web

import { doc } from "firebase/firestore";

const alovelaceDocumentRef = doc(db, 'users', 'alovelace');

doc_reference.js

Web

var alovelaceDocumentRef = db.collection('users').doc('alovelace');

test.firestore.js
Swift

注意:此产品不适用于 watchOS 和 App Clip 目标。

let alovelaceDocumentRef = db.collection("users").document("alovelace")

ViewController.swift
Objective-C

注意:此产品不适用于 watchOS 和 App Clip 目标。

FIRDocumentReference *alovelaceDocumentRef =
    [[self.db collectionWithPath:@"users"] documentWithPath:@"alovelace"];

ViewController.m

Kotlin

val alovelaceDocumentRef = db.collection("users").document("alovelace")

DocSnippets.kt

Java

DocumentReference alovelaceDocumentRef = db.collection("users").document("alovelace");

DocSnippets.java

Dart

final alovelaceDocumentRef = db.collection("users").doc("alovelace");

firestore.dart
Java
// Reference to a document with id "alovelace" in the collection "users"
DocumentReference document = db.collection("users").document("alovelace");

References.java
Python
a_lovelace_ref = db.collection("users").document("alovelace")

snippets.py

Python

a_lovelace_ref = db.collection("users").document("alovelace")

snippets.py
C++
DocumentReference alovelace_document_reference =
    db->Collection("users").Document("alovelace");

snippets.cpp
Node.js
const alovelaceDocumentRef = db.collection('users').doc('alovelace');

index.js
Go
import (
    "cloud.google.com/go/firestore"
)

func createDocReference(client *firestore.Client) {

    alovelaceRef := client.Collection("users").Doc("alovelace")

    _ = alovelaceRef
}

retrieve_data_reference_document.go
PHP

PHP

如需详细了解如何安装和创建 Cloud Firestore 客户端,请参阅 Cloud Firestore 客户端库。

$document = $db->collection('samples/php/users')->document('alovelace');

data_reference_document.php