Cloud Firestore डेटा मॉडल

Cloud Firestore एक NoSQL, दस्तावेज़-ओरिएंटेड डेटाबेस है. SQL डेटाबेस के उलट, इसमें कोई टेबल या लाइन नहीं होती. इसके बजाय, डेटा को दस्तावेज़ों में सेव किया जाता है. इन्हें कलेक्शन में व्यवस्थित किया जाता है.

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

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

Cloud Firestore में कलेक्शन और दस्तावेज़ अपने-आप बन जाते हैं. किसी कलेक्शन में मौजूद दस्तावेज़ में डेटा असाइन करें. अगर कलेक्शन या दस्तावेज़ मौजूद नहीं है, तो 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

    • aturing

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

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

कलेक्शन में सिर्फ़ दस्तावेज़ होते हैं. इसमें सीधे तौर पर वैल्यू वाले रॉ फ़ील्ड शामिल नहीं किए जा सकते. साथ ही, इसमें अन्य कलेक्शन भी शामिल नहीं किए जा सकते. Cloud Firestore में ज़्यादा जटिल डेटा को स्ट्रक्चर करने का तरीका जानने के लिए, हियरार्की वाला डेटा देखें.

किसी कलेक्शन में मौजूद दस्तावेज़ों के नाम यूनीक होते हैं. आपके पास अपनी खुद की कुंजियां देने का विकल्प होता है. जैसे, उपयोगकर्ता आईडी. इसके अलावा, Cloud Firestore को अपने-आप यादृच्छिक आईडी बनाने की अनुमति भी दी जा सकती है.

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

रेफ़रंस

Cloud Firestore में मौजूद हर दस्तावेज़ की पहचान, डेटाबेस में उसकी जगह के हिसाब से की जाती है. पिछले उदाहरण में, कलेक्शन users में मौजूद दस्तावेज़ alovelace दिखाया गया था. अपने कोड में इस जगह का रेफ़रंस देने के लिए, इसका रेफ़रंस बनाया जा सकता है.

import { doc } from "firebase/firestore";

const alovelaceDocumentRef = doc(db, 'users', 'alovelace');
var alovelaceDocumentRef = db.collection('users').doc('alovelace');
ध्यान दें: यह प्रॉडक्ट, watchOS और ऐप्लिकेशन क्लिप टारगेट पर उपलब्ध नहीं है.
let alovelaceDocumentRef = db.collection("users").document("alovelace")
ध्यान दें: यह प्रॉडक्ट, watchOS और ऐप्लिकेशन क्लिप टारगेट पर उपलब्ध नहीं है.
FIRDocumentReference *alovelaceDocumentRef =
    [[self.db collectionWithPath:@"users"] documentWithPath:@"alovelace"];
val alovelaceDocumentRef = db.collection("users").document("alovelace")
DocumentReference alovelaceDocumentRef = db.collection("users").document("alovelace");
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")
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
}

PHP

Cloud Firestore क्लाइंट को इंस्टॉल करने और बनाने के बारे में ज़्यादा जानने के लिए, Cloud Firestore क्लाइंट लाइब्रेरी देखें.

$document = $db->collection('samples/php/users')->document('alovelace');
DocumentReference documentRef = db.Collection("users").Document("alovelace");

C#

Cloud Firestore क्लाइंट को इंस्टॉल करने और बनाने के बारे में ज़्यादा जानने के लिए, Cloud Firestore क्लाइंट लाइब्रेरी देखें.

DocumentReference documentRef = db.Collection("users").Document("alovelace");
document_ref = firestore.col("users").doc("alovelace")

रेफ़रंस एक छोटा ऑब्जेक्ट होता है, जो सिर्फ़ आपके डेटाबेस में किसी जगह पर ले जाता है. रेफ़रंस तब भी बनाया जा सकता है, जब उसमें डेटा मौजूद न हो. साथ ही, रेफ़रंस बनाने पर नेटवर्क पर कोई कार्रवाई नहीं की जाती.

संग्रह के रेफ़रंस भी बनाए जा सकते हैं:

import { collection } from "firebase/firestore";

const usersCollectionRef = collection(db, 'users');
var usersCollectionRef = db.collection('users');
ध्यान दें: यह प्रॉडक्ट, watchOS और ऐप्लिकेशन क्लिप टारगेट पर उपलब्ध नहीं है.
let usersCollectionRef = db.collection("users")
ध्यान दें: यह प्रॉडक्ट, watchOS और ऐप्लिकेशन क्लिप टारगेट पर उपलब्ध नहीं है.
FIRCollectionReference *usersCollectionRef = [self.db collectionWithPath:@"users"];
val usersCollectionRef = db.collection("users")
CollectionReference usersCollectionRef = db.collection("users");
final usersCollectionRef = db.collection("users");
// Reference to the collection "users"
CollectionReference collection = db.collection("users");
users_ref = db.collection("users")
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
}

PHP

Cloud Firestore क्लाइंट को इंस्टॉल करने और बनाने के बारे में ज़्यादा जानने के लिए, Cloud Firestore क्लाइंट लाइब्रेरी देखें.

$collection = $db->collection('samples/php/users');
CollectionReference collectionRef = db.Collection("users");

C#

Cloud Firestore क्लाइंट को इंस्टॉल करने और बनाने के बारे में ज़्यादा जानने के लिए, Cloud Firestore क्लाइंट लाइब्रेरी देखें.

CollectionReference collectionRef = db.Collection("users");
collection_ref = firestore.col "users"

आसानी के लिए, किसी दस्तावेज़ या कलेक्शन के पाथ को स्ट्रिंग के तौर पर बताकर भी रेफ़रंस बनाए जा सकते हैं. पाथ के कॉम्पोनेंट को फ़ॉरवर्ड स्लैश (/) से अलग किया जाता है. उदाहरण के लिए, alovelace दस्तावेज़ का रेफ़रंस बनाने के लिए:

import { doc } from "firebase/firestore"; 

const alovelaceDocumentRef = doc(db, 'users/alovelace');
var alovelaceDocumentRef = db.doc('users/alovelace');
ध्यान दें: यह प्रॉडक्ट, watchOS और ऐप्लिकेशन क्लिप टारगेट पर उपलब्ध नहीं है.
let aLovelaceDocumentReference = db.document("users/alovelace")
ध्यान दें: यह प्रॉडक्ट, watchOS और ऐप्लिकेशन क्लिप टारगेट पर उपलब्ध नहीं है.
FIRDocumentReference *aLovelaceDocumentReference =
    [self.db documentWithPath:@"users/alovelace"];
val alovelaceDocumentRef = db.document("users/alovelace")
DocumentReference alovelaceDocumentRef = db.document("users/alovelace");
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")
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
}

PHP

Cloud Firestore क्लाइंट को इंस्टॉल करने और बनाने के बारे में ज़्यादा जानने के लिए, Cloud Firestore क्लाइंट लाइब्रेरी देखें.

$document = $db->document('users/alovelace');
DocumentReference documentRef = db.Document("users/alovelace");

C#

Cloud Firestore क्लाइंट को इंस्टॉल करने और बनाने के बारे में ज़्यादा जानने के लिए, Cloud Firestore क्लाइंट लाइब्रेरी देखें.

DocumentReference documentRef = db.Document("users/alovelace");
document_path_ref = firestore.doc "users/alovelace"

हैरारकी वाला डेटा

Cloud Firestore में हैरारकी वाले डेटा स्ट्रक्चर के काम करने का तरीका समझने के लिए, मैसेज और चैट रूम वाले चैट ऐप्लिकेशन का उदाहरण देखें.

अलग-अलग चैट रूम सेव करने के लिए, rooms नाम का कलेक्शन बनाया जा सकता है:

  • कमरे

    • roomA

      name : "my chat room"

    • roomB

      ...

अब आपके पास चैट रूम हैं, इसलिए यह तय करें कि आपको अपने मैसेज कैसे सेव करने हैं. हो सकता है कि आप चैट रूम के दस्तावेज़ में इन्हें सेव न करना चाहें. Cloud Firestore में मौजूद दस्तावेज़ छोटे होने चाहिए. साथ ही, चैट रूम में बड़ी संख्या में मैसेज हो सकते हैं. हालांकि, चैट रूम के दस्तावेज़ में, उप-संग्रह के तौर पर अन्य कलेक्शन बनाए जा सकते हैं.

सब-कलेक्शन

इस स्थिति में, सब-कलेक्शन का इस्तेमाल करके मैसेज सेव करने का सबसे अच्छा तरीका है. सब-कलेक्शन, किसी खास दस्तावेज़ से जुड़ा कलेक्शन होता है.

अपने rooms कलेक्शन में मौजूद हर रूम दस्तावेज़ के लिए, messages नाम का सब-कलेक्शन बनाया जा सकता है:

  • कमरे

    • roomA

      name : "my chat room"

      • मैसेज

        • message1

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

        • message2

          ...

    • roomB

      ...

इस उदाहरण में, आपको सब-कलेक्शन में मौजूद मैसेज का रेफ़रंस बनाना होगा. इसके लिए, यह कोड इस्तेमाल करें:

import { doc } from "firebase/firestore"; 

const messageRef = doc(db, "rooms", "roomA", "messages", "message1");
var messageRef = db.collection('rooms').doc('roomA')
                .collection('messages').doc('message1');
ध्यान दें: यह प्रॉडक्ट, watchOS और ऐप्लिकेशन क्लिप टारगेट पर उपलब्ध नहीं है.
let messageRef = db
  .collection("rooms").document("roomA")
  .collection("messages").document("message1")
ध्यान दें: यह प्रॉडक्ट, watchOS और ऐप्लिकेशन क्लिप टारगेट पर उपलब्ध नहीं है.
FIRDocumentReference *messageRef =
    [[[[self.db collectionWithPath:@"rooms"] documentWithPath:@"roomA"]
    collectionWithPath:@"messages"] documentWithPath:@"message1"];
val messageRef = db
    .collection("rooms").document("roomA")
    .collection("messages").document("message1")
DocumentReference messageRef = db
        .collection("rooms").document("roomA")
        .collection("messages").document("message1");
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")
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
}

PHP

Cloud Firestore क्लाइंट को इंस्टॉल करने और बनाने के बारे में ज़्यादा जानने के लिए, Cloud Firestore क्लाइंट लाइब्रेरी देखें.

$document = $db
    ->collection('rooms')
    ->document('roomA')
    ->collection('messages')
    ->document('message1');
DocumentReference documentRef = db
	.Collection("Rooms").Document("RoomA")
	.Collection("Messages").Document("Message1");

C#

Cloud Firestore क्लाइंट को इंस्टॉल करने और बनाने के बारे में ज़्यादा जानने के लिए, Cloud Firestore क्लाइंट लाइब्रेरी देखें.

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 लेवल तक नेस्ट किया जा सकता है.