Cloud Firestore डेटा मॉडल

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

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

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

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

दस्तावेज़

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

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

  • प्यारा

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

किसी दस्तावेज़ में कॉम्प्लेक्स और नेस्ट किए गए ऑब्जेक्ट को मैप कहा जाता है. उदाहरण के लिए, ऊपर दिए गए उदाहरण से उपयोगकर्ता के नाम को मैप की मदद से व्यवस्थित किया जा सकता है, इस तरह:

  • प्यारा

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

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

कलेक्शन

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

  • उपयोगकर्ता

    • प्यारा

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

    • 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+KTX

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+KTX

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+KTX

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 नाम का एक कलेक्शन बनाया जा सकता है:

  • कमरा

    • रूमA

      name : "my chat room"

    • रूमबी

      ...

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

उप-संग्रह

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

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

  • कमरा

    • रूमA

      name : "my chat room"

      • मैसेज

        • मैसेज1

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

        • मैसेज2

          ...

    • रूमबी

      ...

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

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+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");
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 में कलेक्शन रेफ़रंस बनाएं. साथ ही, इसे किसी दूसरे कलेक्शन रेफ़रंस की तरह इस्तेमाल करें.

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