Cloud Firestore は NoSQL のドキュメント指向データベースです。 SQL データベースとは異なり、テーブルや行はありません。代わりに、コレクションに編成されたドキュメントにデータを保存します。
各ドキュメントには、一連のキーと値のペアが含まれています。 Cloud Firestore は、小さなドキュメントの大規模なコレクションを保存するために最適化されています。
すべてのドキュメントはコレクションに格納する必要があります。ドキュメントにはサブコレクションとネストされたオブジェクトを含めることができ、どちらにも文字列などのプリミティブ フィールドやリストなどの複雑なオブジェクトを含めることができます。
コレクションとドキュメントは Cloud Firestore で暗黙的に作成されます。コレクション内のドキュメントにデータを割り当てるだけです。コレクションまたはドキュメントが存在しない場合は、Cloud Firestore によって作成されます。
ドキュメント
Cloud Firestore では、ストレージの単位はドキュメントです。ドキュメントは、値にマップされるフィールドを含む軽量のレコードです。各ドキュメントは名前で識別されます。
ユーザーalovelace
を表すドキュメントは次のようになります。
first : "Ada"
last : "Lovelace"
born : 1815
ドキュメント内の複雑でネストされたオブジェクトは、マップと呼ばれます。たとえば、次のように、マップを使用して上記の例からユーザーの名前を構造化できます。
name :
first : "Ada"
last : "Lovelace"
born : 1815
ドキュメントが JSON によく似ていることに気付くかもしれません。実際、彼らは基本的にそうです。いくつかの違いがあります (たとえば、ドキュメントは追加のデータ型をサポートし、サイズが 1 MB に制限されています) が、一般的に、ドキュメントは軽量の JSON レコードとして扱うことができます。
コレクション
ドキュメントは、ドキュメントの単なるコンテナーであるコレクションに存在します。たとえば、さまざまなユーザーを含むusers
コレクションを作成し、それぞれをドキュメントで表すことができます。
アロブレイス
first : "Ada"
last : "Lovelace"
born : 1815
first : "Alan"
last : "Turing"
born : 1912
Cloud Firestore はスキーマレスであるため、各ドキュメントに入力するフィールドと、それらのフィールドに保存するデータ型を完全に自由に設定できます。同じコレクション内のドキュメントはすべて、異なるフィールドを含むか、それらのフィールドに異なるタイプのデータを格納できます。ただし、ドキュメントをより簡単にクエリできるように、複数のドキュメントで同じフィールドとデータ型を使用することをお勧めします。
コレクションにはドキュメントのみが含まれます。値を持つ生のフィールドを直接含めることはできず、他のコレクションを含めることもできません。 (Cloud Firestore でより複雑なデータを構造化する方法については、階層データを参照してください。)
コレクション内のドキュメントの名前は一意です。ユーザー ID などの独自のキーを提供することも、Cloud Firestore にランダム ID を自動的に作成させることもできます。
コレクションを「作成」または「削除」する必要はありません。コレクションに最初のドキュメントを作成すると、コレクションが存在します。コレクション内のすべてのドキュメントを削除すると、コレクションは存在しなくなります。
参考文献
Cloud Firestore のすべてのドキュメントは、データベース内の場所によって一意に識別されます。前の例では、コレクションusers
内のドキュメントalovelace
を示しました。コード内でこの場所を参照するには、その場所への参照を作成できます。
Web version 9
import { doc } from "firebase/firestore"; const alovelaceDocumentRef = doc(db, 'users', 'alovelace');
Web version 8
var alovelaceDocumentRef = db.collection('users').doc('alovelace');
迅速
let alovelaceDocumentRef = db.collection("users").document("alovelace")
Objective-C
FIRDocumentReference *alovelaceDocumentRef = [[self.db collectionWithPath:@"users"] documentWithPath:@"alovelace"];
Kotlin+KTX
val alovelaceDocumentRef = db.collection("users").document("alovelace")
Java
DocumentReference alovelaceDocumentRef = db.collection("users").document("alovelace");
Dart
final alovelaceDocumentRef = db.collection("users").doc("alovelace");
ジャワ
パイソン
Python
C++
DocumentReference alovelace_document_reference = db->Collection("users").Document("alovelace");
Node.js
行け
PHP
PHP
Cloud Firestore クライアントのインストールと作成の詳細については、 Cloud Firestore クライアント ライブラリを参照してください。
団結
DocumentReference documentRef = db.Collection("users").Document("alovelace");
C#
C#
Cloud Firestore クライアントのインストールと作成の詳細については、 Cloud Firestore クライアント ライブラリを参照してください。
ルビー
参照は、データベース内の場所を指すだけの軽量オブジェクトです。そこにデータが存在するかどうかに関係なく、参照を作成できます。参照を作成しても、ネットワーク操作は実行されません。
コレクションへの参照を作成することもできます:
Web version 9
import { collection } from "firebase/firestore"; const usersCollectionRef = collection(db, 'users');
Web version 8
var usersCollectionRef = db.collection('users');
迅速
let usersCollectionRef = db.collection("users")
Objective-C
FIRCollectionReference *usersCollectionRef = [self.db collectionWithPath:@"users"];
Kotlin+KTX
val usersCollectionRef = db.collection("users")
Java
CollectionReference usersCollectionRef = db.collection("users");
Dart
final usersCollectionRef = db.collection("users");
ジャワ
パイソン
Python
C++
CollectionReference users_collection_reference = db->Collection("users");
Node.js
行け
PHP
PHP
Cloud Firestore クライアントのインストールと作成の詳細については、 Cloud Firestore クライアント ライブラリを参照してください。
団結
CollectionReference collectionRef = db.Collection("users");
C#
C#
Cloud Firestore クライアントのインストールと作成の詳細については、 Cloud Firestore クライアント ライブラリを参照してください。
ルビー
便宜上、ドキュメントまたはコレクションへのパスを文字列として指定し、パス コンポーネントをスラッシュ ( /
) で区切って参照を作成することもできます。たとえば、 alovelace
ドキュメントへの参照を作成するには:
Web version 9
import { doc } from "firebase/firestore"; const alovelaceDocumentRef = doc(db, 'users/alovelace');
Web version 8
var alovelaceDocumentRef = db.doc('users/alovelace');
迅速
let aLovelaceDocumentReference = db.document("users/alovelace")
Objective-C
FIRDocumentReference *aLovelaceDocumentReference = [self.db documentWithPath:@"users/alovelace"];
Kotlin+KTX
val alovelaceDocumentRef = db.document("users/alovelace")
Java
DocumentReference alovelaceDocumentRef = db.document("users/alovelace");
Dart
final aLovelaceDocRef = db.doc("users/alovelace");
ジャワ
パイソン
Python
C++
DocumentReference alovelace_document = db->Document("users/alovelace");
Node.js
行け
PHP
PHP
Cloud Firestore クライアントのインストールと作成の詳細については、 Cloud Firestore クライアント ライブラリを参照してください。
団結
DocumentReference documentRef = db.Document("users/alovelace");
C#
C#
Cloud Firestore クライアントのインストールと作成の詳細については、 Cloud Firestore クライアント ライブラリを参照してください。
ルビー
階層データ
Cloud Firestore で階層データ構造がどのように機能するかを理解するために、メッセージとチャット ルームを備えたチャット アプリの例を考えてみましょう。
ルームと呼ばれるコレクションを作成して、さまざまなチャットrooms
を保存できます。
A
name : "my chat room"
...
チャット ルームができたので、メッセージの保存方法を決定します。それらをチャット ルームのドキュメントに保存したくない場合があります。 Cloud Firestore のドキュメントは軽量である必要があり、チャット ルームには多数のメッセージを含めることができます。ただし、サブコレクションとして、チャット ルームのドキュメント内に追加のコレクションを作成できます。
サブコレクション
このシナリオでメッセージを保存する最善の方法は、サブコレクションを使用することです。サブコレクションは、特定のドキュメントに関連付けられたコレクションです。
rooms
コレクション内のすべてのルーム ドキュメントに対して、 messages
というサブコレクションを作成できます。
A
name : "my chat room"
メッセージ1
from : "alex"
msg : "Hello World!"
...
...
この例では、次のコードを使用して、サブコレクション内のメッセージへの参照を作成します。
Web version 9
import { doc } from "firebase/firestore"; const messageRef = doc(db, "rooms", "roomA", "messages", "message1");
Web version 8
var messageRef = db.collection('rooms').doc('roomA') .collection('messages').doc('message1');
迅速
let messageRef = db .collection("rooms").document("roomA") .collection("messages").document("message1")
Objective-C
FIRDocumentReference *messageRef = [[[[self.db collectionWithPath:@"rooms"] documentWithPath:@"roomA"] collectionWithPath:@"messages"] documentWithPath:@"message1"];
Kotlin+KTX
val messageRef = db .collection("rooms").document("roomA") .collection("messages").document("message1")
Java
DocumentReference messageRef = db .collection("rooms").document("roomA") .collection("messages").document("message1");
Dart
final messageRef = db .collection("rooms") .doc("roomA") .collection("messages") .doc("message1");
ジャワ
パイソン
Python
C++
DocumentReference message_reference = db->Collection("rooms") .Document("roomA") .Collection("messages") .Document("message1");
Node.js
行け
PHP
PHP
Cloud Firestore クライアントのインストールと作成の詳細については、 Cloud Firestore クライアント ライブラリを参照してください。
団結
DocumentReference documentRef = db .Collection("Rooms").Document("RoomA") .Collection("Messages").Document("Message1");
C#
C#
Cloud Firestore クライアントのインストールと作成の詳細については、 Cloud Firestore クライアント ライブラリを参照してください。
ルビー
コレクションとドキュメントが交互に配置されていることに注意してください。コレクションとドキュメントは、常にこのパターンに従う必要があります。コレクション内のコレクションまたはドキュメント内のドキュメントを参照することはできません。
サブコレクションを使用すると、データを階層的に構造化できるため、データへのアクセスが容易になります。 roomA
内のすべてのメッセージを取得するには、サブコレクションmessages
へのコレクション参照を作成し、他のコレクション参照と同じように操作できます。
サブコレクション内のドキュメントにもサブコレクションを含めることができるため、データをさらにネストできます。最大 100 レベルの深さまでデータをネストできます。