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 दस्तावेज़ को दिखाया गया था. अपने कोड में इस जगह का रेफ़रंस देने के लिए, इसका रेफ़रंस बनाया जा सकता है.

Web

import { doc } from "firebase/firestore";

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

Web

var alovelaceDocumentRef = db.collection('users').doc('alovelace');
Swift
ध्यान दें: यह प्रॉडक्ट, watchOS और App Clip टारगेट पर उपलब्ध नहीं है.
let alovelaceDocumentRef = db.collection("users").document("alovelace")
Objective-C
ध्यान दें: यह प्रॉडक्ट, watchOS और App Clip टारगेट पर उपलब्ध नहीं है.
FIRDocumentReference *alovelaceDocumentRef =
    [[self.db collectionWithPath:@"users"] documentWithPath:@"alovelace"];

Kotlin

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

Java

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

Dart

final alovelaceDocumentRef = db.collection("users").doc("alovelace");
Java
// Reference to a document with id "alovelace" in the collection "users"
DocumentReference document = db.collection("users").document("alovelace");
Python
a_lovelace_ref = db.collection("users").document("alovelace")

Python

a_lovelace_ref = db.collection("users").document("alovelace")
C++
DocumentReference alovelace_document_reference =
    db->Collection("users").Document("alovelace");
Node.js
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

PHP

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

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

C#

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

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

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

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

Web

import { collection } from "firebase/firestore";

const usersCollectionRef = collection(db, 'users');

Web

var usersCollectionRef = db.collection('users');
Swift
ध्यान दें: यह प्रॉडक्ट, watchOS और App Clip टारगेट पर उपलब्ध नहीं है.
let usersCollectionRef = db.collection("users")
Objective-C
ध्यान दें: यह प्रॉडक्ट, watchOS और App Clip टारगेट पर उपलब्ध नहीं है.
FIRCollectionReference *usersCollectionRef = [self.db collectionWithPath:@"users"];

Kotlin

val usersCollectionRef = db.collection("users")

Java

CollectionReference usersCollectionRef = db.collection("users");

Dart

final usersCollectionRef = db.collection("users");
Java
// Reference to the collection "users"
CollectionReference collection = db.collection("users");
Python
users_ref = db.collection("users")

Python

users_ref = db.collection("users")
C++
CollectionReference users_collection_reference = db->Collection("users");
Node.js
const usersCollectionRef = db.collection('users');
शुरू करें

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

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

	_ = usersRef
}
PHP

PHP

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

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

C#

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

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

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

Web

import { doc } from "firebase/firestore"; 

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

Web

var alovelaceDocumentRef = db.doc('users/alovelace');
Swift
ध्यान दें: यह प्रॉडक्ट, watchOS और App Clip टारगेट पर उपलब्ध नहीं है.
let aLovelaceDocumentReference = db.document("users/alovelace")
Objective-C
ध्यान दें: यह प्रॉडक्ट, watchOS और App Clip टारगेट पर उपलब्ध नहीं है.
FIRDocumentReference *aLovelaceDocumentReference =
    [self.db documentWithPath:@"users/alovelace"];

Kotlin

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

Java

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

Dart

final aLovelaceDocRef = db.doc("users/alovelace");
Java
// Reference to a document with id "alovelace" in the collection "users"
DocumentReference document = db.document("users/alovelace");
Python
a_lovelace_ref = db.document("users/alovelace")

Python

a_lovelace_ref = db.document("users/alovelace")
C++
DocumentReference alovelace_document = db->Document("users/alovelace");
Node.js
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

PHP

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

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

C#

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

DocumentReference documentRef = db.Document("users/alovelace");
Ruby
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

      ...

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

Web

import { doc } from "firebase/firestore"; 

const messageRef = doc(db, "rooms", "roomA", "messages", "message1");

Web

var messageRef = db.collection('rooms').doc('roomA')
                .collection('messages').doc('message1');
Swift
ध्यान दें: यह प्रॉडक्ट, watchOS और App Clip टारगेट पर उपलब्ध नहीं है.
let messageRef = db
  .collection("rooms").document("roomA")
  .collection("messages").document("message1")
Objective-C
ध्यान दें: यह प्रॉडक्ट, watchOS और App Clip टारगेट पर उपलब्ध नहीं है.
FIRDocumentReference *messageRef =
    [[[[self.db collectionWithPath:@"rooms"] documentWithPath:@"roomA"]
    collectionWithPath:@"messages"] documentWithPath:@"message1"];

Kotlin

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");
Java
// Reference to a document in subcollection "messages"
DocumentReference document =
    db.collection("rooms").document("roomA").collection("messages").document("message1");
Python
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")
C++
DocumentReference message_reference = db->Collection("rooms")
    .Document("roomA")
    .Collection("messages")
    .Document("message1");
Node.js
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

PHP

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

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

C#

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

DocumentReference documentRef = db
    .Collection("Rooms").Document("RoomA")
    .Collection("Messages").Document("Message1");
Ruby
message_ref = firestore.col("rooms").doc("roomA").col("messages").doc("message1")

कलेक्शन और दस्तावेज़ों के क्रम में बदलाव पर ध्यान दें. आपके कलेक्शन और दस्तावेज़ों में हमेशा इस पैटर्न का पालन किया जाना चाहिए. किसी कलेक्शन में मौजूद कलेक्शन या किसी दस्तावेज़ में मौजूद दस्तावेज़ का रेफ़रंस नहीं दिया जा सकता.

सब-कलेक्शन की मदद से, डेटा को क्रम के हिसाब से व्यवस्थित किया जा सकता है. इससे डेटा को आसानी से ऐक्सेस किया जा सकता है. roomA में मौजूद सभी मैसेज पाने के लिए, messages सब-कलेक्शन का कलेक्शन रेफ़रंस बनाया जा सकता है. इसके बाद, इसके साथ उसी तरह इंटरैक्ट किया जा सकता है जिस तरह किसी अन्य कलेक्शन रेफ़रंस के साथ किया जाता है.

सबकलेक्शन में मौजूद दस्तावेज़ों में भी सबकलेक्शन हो सकते हैं. इससे आपको डेटा को और ज़्यादा नेस्ट करने की सुविधा मिलती है. डेटा को ज़्यादा से ज़्यादा 100 लेवल तक नेस्ट किया जा सकता है.