Catch up on highlights from Firebase at Google I/O 2023. Learn more

क्लाउड फायरस्टोर डेटा मॉडल

Cloud Firestore एक NoSQL, दस्तावेज़-उन्मुख डेटाबेस है। SQL डेटाबेस के विपरीत, कोई टेबल या पंक्तियाँ नहीं हैं। इसके बजाय, आप दस्तावेज़ों में डेटा संग्रहीत करते हैं, जो संग्रह में व्यवस्थित होते हैं।

प्रत्येक दस्तावेज़ में कुंजी-मूल्य जोड़े का एक सेट होता है। Cloud Firestore को छोटे दस्तावेज़ों के बड़े संग्रह को संग्रहीत करने के लिए अनुकूलित किया गया है।

सभी दस्तावेजों को संग्रह में संग्रहित किया जाना चाहिए। दस्तावेज़ों में उप-संग्रह और नेस्टेड ऑब्जेक्ट हो सकते हैं, जिनमें से दोनों में आदिम फ़ील्ड जैसे स्ट्रिंग्स या जटिल ऑब्जेक्ट जैसे सूचियाँ शामिल हो सकती हैं।

क्लाउड फायरस्टोर में संग्रह और दस्तावेज अप्रत्यक्ष रूप से बनाए जाते हैं। केवल एक संग्रह के भीतर दस्तावेज़ को डेटा असाइन करें। यदि संग्रह या दस्तावेज़ मौजूद नहीं है, तो Cloud Firestore इसे बनाता है।

दस्तावेज़

क्लाउड फायरस्टोर में, भंडारण की इकाई दस्तावेज़ है। एक दस्तावेज़ एक हल्का रिकॉर्ड होता है जिसमें फ़ील्ड होते हैं, जो मानों को मैप करते हैं। प्रत्येक दस्तावेज़ को एक नाम से पहचाना जाता है।

एक उपयोगकर्ता alovelace प्रतिनिधित्व करने वाला एक दस्तावेज़ ऐसा दिखाई दे सकता है:

  • alovelace

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

किसी दस्तावेज़ में जटिल, नेस्टेड ऑब्जेक्ट को मानचित्र कहा जाता है। उदाहरण के लिए, आप उपरोक्‍त उदाहरण से उपयोक्‍ता के नाम को एक मानचित्र के साथ इस प्रकार संरचित कर सकते हैं:

  • alovelace

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

आप देख सकते हैं कि दस्तावेज़ बहुत हद तक JSON जैसे दिखते हैं। वास्तव में, वे मूल रूप से हैं। कुछ अंतर हैं (उदाहरण के लिए, दस्तावेज़ अतिरिक्त डेटा प्रकारों का समर्थन करते हैं और आकार में 1 एमबी तक सीमित हैं), लेकिन सामान्य तौर पर, आप दस्तावेज़ों को हल्के JSON रिकॉर्ड के रूप में मान सकते हैं।

संग्रह

दस्तावेज़ संग्रह में रहते हैं, जो केवल दस्तावेज़ों के लिए कंटेनर होते हैं। उदाहरण के लिए, आपके पास अपने विभिन्न उपयोगकर्ताओं को शामिल करने के लिए एक users संग्रह हो सकता है, प्रत्येक एक दस्तावेज़ द्वारा दर्शाया गया है:

  • उपयोगकर्ता

    • alovelace

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

    • एट्यूरिंग

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

क्लाउड फायरस्टार स्कीमलेस है, इसलिए आपको इस बात की पूरी आज़ादी है कि आप प्रत्येक दस्तावेज़ में कौन से फ़ील्ड डालते हैं और आप उन फ़ील्ड में किस प्रकार का डेटा स्टोर करते हैं। एक ही संग्रह के दस्तावेज़ों में सभी अलग-अलग फ़ील्ड हो सकते हैं या उन फ़ील्ड में विभिन्न प्रकार के डेटा स्टोर कर सकते हैं। हालांकि, एक से अधिक दस्तावेज़ों में समान फ़ील्ड और डेटा प्रकारों का उपयोग करना एक अच्छा विचार है, ताकि आप दस्तावेज़ों को अधिक आसानी से क्वेरी कर सकें।

एक संग्रह में दस्तावेज़ होते हैं और कुछ नहीं। इसमें मूल्यों के साथ सीधे कच्चे फ़ील्ड नहीं हो सकते हैं, और इसमें अन्य संग्रह नहीं हो सकते हैं। (क्लाउड फायरस्टोर में अधिक जटिल डेटा की संरचना कैसे करें, इसकी व्याख्या के लिए श्रेणीबद्ध डेटा देखें।)

एक संग्रह के भीतर दस्तावेज़ों के नाम अद्वितीय हैं। आप अपनी स्वयं की कुंजियाँ प्रदान कर सकते हैं, जैसे कि उपयोगकर्ता आईडी, या आप क्लाउड फायरस्टोर को आपके लिए स्वचालित रूप से यादृच्छिक आईडी बनाने दे सकते हैं।

आपको संग्रह "बनाने" या "हटाने" की आवश्यकता नहीं है। आपके द्वारा किसी संग्रह में पहला दस्तावेज़ बनाने के बाद, संग्रह मौजूद रहता है। यदि आप किसी संग्रह के सभी दस्तावेज़ हटा देते हैं, तो वह अब मौजूद नहीं है।

संदर्भ

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")
उद्देश्य सी
नोट: यह उत्पाद वॉचओएस और एप क्लिप लक्ष्यों पर उपलब्ध नहीं है।
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");
जावा
// Reference to a document with id "alovelace" in the collection "users"
DocumentReference document = db.collection("users").document("alovelace");
अजगर
a_lovelace_ref = db.collection('users').document('alovelace')

Python

a_lovelace_ref = db.collection("users").document("alovelace")
सी ++
DocumentReference alovelace_document_reference =
    db->Collection("users").Document("alovelace");
नोड.जेएस
const alovelaceDocumentRef = db.collection('users').doc('alovelace');
जाना

import (
	"cloud.google.com/go/firestore"
)

func createDocReference(client *firestore.Client) {

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

	_ = alovelaceRef
}
पीएचपी

पीएचपी

क्लाउड फायरस्टोर क्लाइंट स्थापित करने और बनाने के बारे में अधिक जानकारी के लिए, क्लाउड फायरस्टोर क्लाइंट लाइब्रेरी देखें।

$document = $db->collection('samples/php/users')->document('alovelace');
एकता
DocumentReference documentRef = db.Collection("users").Document("alovelace");
सी#

सी#

क्लाउड फायरस्टोर क्लाइंट स्थापित करने और बनाने के बारे में अधिक जानकारी के लिए, क्लाउड फायरस्टोर क्लाइंट लाइब्रेरी देखें।

DocumentReference documentRef = db.Collection("users").Document("alovelace");
माणिक
document_ref = firestore.col("users").doc("alovelace")

एक संदर्भ एक हल्की वस्तु है जो आपके डेटाबेस में किसी स्थान की ओर इशारा करता है। आप एक संदर्भ बना सकते हैं कि डेटा वहां मौजूद है या नहीं, और एक संदर्भ बनाने से कोई नेटवर्क संचालन नहीं होता है।

आप संग्रहों के संदर्भ भी बना सकते हैं:

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")
उद्देश्य सी
नोट: यह उत्पाद वॉचओएस और एप क्लिप लक्ष्यों पर उपलब्ध नहीं है।
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");
जावा
// Reference to the collection "users"
CollectionReference collection = db.collection("users");
अजगर
users_ref = db.collection('users')

Python

users_ref = db.collection("users")
सी ++
CollectionReference users_collection_reference = db->Collection("users");
नोड.जेएस
const usersCollectionRef = db.collection('users');
जाना

import (
	"cloud.google.com/go/firestore"
)

func createCollectionReference(client *firestore.Client) {
	usersRef := client.Collection("users")

	_ = usersRef
}
पीएचपी

पीएचपी

क्लाउड फायरस्टोर क्लाइंट स्थापित करने और बनाने के बारे में अधिक जानकारी के लिए, क्लाउड फायरस्टोर क्लाइंट लाइब्रेरी देखें।

$collection = $db->collection('samples/php/users');
एकता
CollectionReference collectionRef = db.Collection("users");
सी#

सी#

क्लाउड फायरस्टोर क्लाइंट स्थापित करने और बनाने के बारे में अधिक जानकारी के लिए, क्लाउड फायरस्टोर क्लाइंट लाइब्रेरी देखें।

CollectionReference collectionRef = db.Collection("users");
माणिक
collection_ref = firestore.col "users"

सुविधा के लिए, आप फ़ॉरवर्ड स्लैश ( / ) द्वारा अलग किए गए पथ घटकों के साथ एक स्ट्रिंग के रूप में किसी दस्तावेज़ या संग्रह के पथ को निर्दिष्ट करके भी संदर्भ बना सकते हैं। उदाहरण के लिए, 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")
उद्देश्य सी
नोट: यह उत्पाद वॉचओएस और एप क्लिप लक्ष्यों पर उपलब्ध नहीं है।
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");
जावा
// Reference to a document with id "alovelace" in the collection "users"
DocumentReference document = db.document("users/alovelace");
अजगर
a_lovelace_ref = db.document('users/alovelace')

Python

a_lovelace_ref = db.document("users/alovelace")
सी ++
DocumentReference alovelace_document = db->Document("users/alovelace");
नोड.जेएस
const alovelaceDocumentRef = db.doc('users/alovelace');
जाना

import (
	"cloud.google.com/go/firestore"
)

func createDocReferenceFromString(client *firestore.Client) {
	// Reference to a document with id "alovelace" in the collection "users"
	alovelaceRef := client.Doc("users/alovelace")

	_ = alovelaceRef
}
पीएचपी

पीएचपी

क्लाउड फायरस्टोर क्लाइंट स्थापित करने और बनाने के बारे में अधिक जानकारी के लिए, क्लाउड फायरस्टोर क्लाइंट लाइब्रेरी देखें।

$document = $db->document('users/alovelace');
एकता
DocumentReference documentRef = db.Document("users/alovelace");
सी#

सी#

क्लाउड फायरस्टोर क्लाइंट स्थापित करने और बनाने के बारे में अधिक जानकारी के लिए, क्लाउड फायरस्टोर क्लाइंट लाइब्रेरी देखें।

DocumentReference documentRef = db.Document("users/alovelace");
माणिक
document_path_ref = firestore.doc "users/alovelace"

पदानुक्रमित डेटा

क्लाउड फायरस्टोर में पदानुक्रमित डेटा संरचनाएं कैसे काम करती हैं, यह समझने के लिए, संदेशों और चैट रूम के साथ एक उदाहरण चैट ऐप पर विचार करें।

आप अलग-अलग चैट रूम स्टोर करने के लिए rooms नामक संग्रह बना सकते हैं:

  • कमरे

    • रूम ए

      name : "my chat room"

    • रूम बी

      ...

अब जब आपके पास चैट रूम हैं, तो तय करें कि आप अपने संदेशों को कैसे स्टोर करें। हो सकता है कि आप उन्हें चैट रूम के दस्तावेज़ में संग्रहीत न करना चाहें। क्लाउड फायरस्टोर में दस्तावेज़ हल्के होने चाहिए, और एक चैट रूम में बड़ी संख्या में संदेश हो सकते हैं। हालांकि, आप अपने चैट रूम के दस्तावेज़ में उपसंग्रह के रूप में अतिरिक्त संग्रह बना सकते हैं।

उपसंग्रह

इस परिदृश्य में संदेशों को संग्रहीत करने का सबसे अच्छा तरीका उपसंग्रहों का उपयोग करना है। एक उपसंग्रह एक विशिष्ट दस्तावेज़ से जुड़ा एक संग्रह है।

आप अपने rooms संग्रह में प्रत्येक कक्ष दस्तावेज़ के लिए messages नामक एक उपसंग्रह बना सकते हैं:

  • कमरे

    • रूम ए

      name : "my chat room"

      • संदेश

        • संदेश1

          from : "alex"
          msg : "Hello World!"

        • संदेश 2

          ...

    • रूम बी

      ...

इस उदाहरण में, आप निम्नलिखित कोड के साथ उपसंग्रह में एक संदेश का संदर्भ तैयार करेंगे:

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")
उद्देश्य सी
नोट: यह उत्पाद वॉचओएस और एप क्लिप लक्ष्यों पर उपलब्ध नहीं है।
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");
जावा
// Reference to a document in subcollection "messages"
DocumentReference document =
    db.collection("rooms").document("roomA").collection("messages").document("message1");
अजगर
room_a_ref = db.collection('rooms').document('roomA')
message_ref = room_a_ref.collection('messages').document('message1')

Python

room_a_ref = db.collection("rooms").document("roomA")
message_ref = room_a_ref.collection("messages").document("message1")
सी ++
DocumentReference message_reference = db->Collection("rooms")
    .Document("roomA")
    .Collection("messages")
    .Document("message1");
नोड.जेएस
const messageRef = db.collection('rooms').doc('roomA')
  .collection('messages').doc('message1');
जाना

import (
	"cloud.google.com/go/firestore"
)

func createSubcollectionReference(client *firestore.Client) {
	messageRef := client.Collection("rooms").Doc("roomA").
		Collection("messages").Doc("message1")

	_ = messageRef
}
पीएचपी

पीएचपी

क्लाउड फायरस्टोर क्लाइंट स्थापित करने और बनाने के बारे में अधिक जानकारी के लिए, क्लाउड फायरस्टोर क्लाइंट लाइब्रेरी देखें।

$document = $db
    ->collection('rooms')
    ->document('roomA')
    ->collection('messages')
    ->document('message1');
एकता
DocumentReference documentRef = db
	.Collection("Rooms").Document("RoomA")
	.Collection("Messages").Document("Message1");
सी#

सी#

क्लाउड फायरस्टोर क्लाइंट स्थापित करने और बनाने के बारे में अधिक जानकारी के लिए, क्लाउड फायरस्टोर क्लाइंट लाइब्रेरी देखें।

DocumentReference documentRef = db
    .Collection("Rooms").Document("RoomA")
    .Collection("Messages").Document("Message1");
माणिक
message_ref = firestore.col("rooms").doc("roomA").col("messages").doc("message1")

संग्रह और दस्तावेजों के वैकल्पिक पैटर्न पर ध्यान दें। आपके संग्रह और दस्तावेज़ों को हमेशा इस पैटर्न का पालन करना चाहिए। आप संग्रह में संग्रह या दस्तावेज़ में दस्तावेज़ का संदर्भ नहीं दे सकते।

उपसंग्रह आपको डेटा को पदानुक्रमित रूप से व्यवस्थित करने की अनुमति देते हैं, जिससे डेटा तक पहुंचना आसान हो जाता है। roomA में सभी संदेशों को प्राप्त करने के लिए, आप उपसंग्रह messages के लिए एक संग्रह संदर्भ बना सकते हैं और इसके साथ बातचीत कर सकते हैं जैसे आप किसी अन्य संग्रह संदर्भ के साथ करते हैं।

उप-संग्रहों में दस्तावेज़ों में उप-संग्रह भी हो सकते हैं, जिससे आप डेटा को और नेस्ट कर सकते हैं। आप 100 स्तरों तक गहरे डेटा को नेस्ट कर सकते हैं।