Cloud Firestore एक NoSQL, दस्तावेज़-ओरिएंटेड डेटाबेस है. SQL डेटाबेस के उलट, इसमें कोई टेबल या लाइन नहीं होती. इसके बजाय, डेटा को दस्तावेज़ों में सेव किया जाता है, जिन्हें कलेक्शन में व्यवस्थित किया जाता है.
हर दस्तावेज़ में की-वैल्यू पेयर का एक सेट होता है. Cloud Firestore को छोटे-छोटे दस्तावेज़ों के बड़े कलेक्शन को सेव करने के लिए ऑप्टिमाइज़ किया जाता है.
सभी दस्तावेज़ों को कलेक्शन में सेव करना ज़रूरी है. दस्तावेज़ों में सब-कलेक्शन और नेस्ट किए गए ऑब्जेक्ट शामिल हो सकते हैं. इन दोनों में, स्ट्रिंग जैसे प्राइमिटिव फ़ील्ड या सूचियों जैसे जटिल ऑब्जेक्ट शामिल हो सकते हैं.
कलेक्शन और दस्तावेज़, Cloud Firestore में साफ़ तौर पर बनाए जाते हैं. इसके लिए, कलेक्शन में मौजूद किसी दस्तावेज़ को डेटा असाइन करें. अगर कलेक्शन या दस्तावेज़ मौजूद नहीं है, तो Cloud Firestore उसे बनाता है.
दस्तावेज़
Cloud Firestore में, स्टोरेज की यूनिट दस्तावेज़ है. दस्तावेज़ एक लाइटवेट रिकॉर्ड होता है, जिसमें फ़ील्ड होते हैं जो वैल्यू पर मैप करते हैं. हर दस्तावेज़ को एक नाम से पहचाना जाता है.
उपयोगकर्ता 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
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");
Java
Python
Python
C++
DocumentReference alovelace_document_reference = db->Collection("users").Document("alovelace");
Node.js
शुरू करें
PHP
PHP
Cloud Firestore क्लाइंट को इंस्टॉल करने और बनाने के बारे में ज़्यादा जानने के लिए, Cloud Firestore क्लाइंट लाइब्रेरी देखें.
Unity
DocumentReference documentRef = db.Collection("users").Document("alovelace");
C#
C#
Cloud Firestore क्लाइंट बनाने और इंस्टॉल करने के बारे में ज़्यादा जानकारी के लिए, Cloud Firestore क्लाइंट लाइब्रेरी देखें.
Ruby
रेफ़रंस एक लाइटवेट ऑब्जेक्ट होता है, जो सिर्फ़ आपके डेटाबेस में मौजूद किसी जगह पर ले जाता है. यह रेफ़रंस बनाया जा सकता है, भले ही डेटा वहां मौजूद हो या नहीं. साथ ही, रेफ़रंस बनाने से कोई नेटवर्क ऑपरेशन नहीं होता है.
कलेक्शन के रेफ़रंस भी बनाए जा सकते हैं:
Web
import { collection } from "firebase/firestore"; const usersCollectionRef = collection(db, 'users');
Web
var usersCollectionRef = db.collection('users');
Swift
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");
Java
Python
Python
C++
CollectionReference users_collection_reference = db->Collection("users");
Node.js
शुरू करें
PHP
PHP
Cloud Firestore क्लाइंट को इंस्टॉल करने और बनाने के बारे में ज़्यादा जानने के लिए, Cloud Firestore क्लाइंट लाइब्रेरी देखें.
Unity
CollectionReference collectionRef = db.Collection("users");
C#
C#
Cloud Firestore क्लाइंट को इंस्टॉल करने और बनाने के बारे में ज़्यादा जानने के लिए, Cloud Firestore क्लाइंट लाइब्रेरी देखें.
Ruby
आसानी के लिए, किसी दस्तावेज़ या कलेक्शन के पाथ को स्ट्रिंग के तौर पर बताकर भी रेफ़रंस बनाए जा सकते हैं. पाथ के कॉम्पोनेंट को फ़ॉरवर्ड स्लैश (/
) से अलग किया जाता है. उदाहरण के लिए, alovelace
दस्तावेज़ का रेफ़रंस बनाने के लिए:
Web
import { doc } from "firebase/firestore"; const alovelaceDocumentRef = doc(db, 'users/alovelace');
Web
var alovelaceDocumentRef = db.doc('users/alovelace');
Swift
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");
Java
Python
Python
C++
DocumentReference alovelace_document = db->Document("users/alovelace");
Node.js
शुरू करें
PHP
PHP
Cloud Firestore क्लाइंट को इंस्टॉल करने और बनाने के बारे में ज़्यादा जानने के लिए, Cloud Firestore क्लाइंट लाइब्रेरी देखें.
Unity
DocumentReference documentRef = db.Document("users/alovelace");
C#
C#
Cloud Firestore क्लाइंट को इंस्टॉल करने और बनाने के बारे में ज़्यादा जानने के लिए, Cloud Firestore क्लाइंट लाइब्रेरी देखें.
Ruby
हैरारकी वाला डेटा
Cloud Firestore में हैरारकी वाले डेटा स्ट्रक्चर के काम करने का तरीका समझने के लिए, मैसेज और चैट रूम वाले चैट ऐप्लिकेशन का उदाहरण देखें.
अलग-अलग चैट रूम को सेव करने के लिए, rooms
नाम का एक कलेक्शन बनाया जा सकता है:
कमरा
रूमA
name : "my chat room"
रूमबी
...
अब आपके पास चैट रूम हैं, इसलिए यह तय करें कि आपको अपने मैसेज कैसे सेव करने हैं. ऐसा हो सकता है कि आप उन्हें चैट रूम के दस्तावेज़ में सेव न करना चाहें. Cloud Firestore में मौजूद दस्तावेज़ छोटे होने चाहिए. साथ ही, चैट रूम में बड़ी संख्या में मैसेज हो सकते हैं. हालांकि, चैट रूम के दस्तावेज़ में, उप-संग्रह के तौर पर अन्य कलेक्शन बनाए जा सकते हैं.
सब-कलेक्शन
इस स्थिति में, सब-कलेक्शन का इस्तेमाल करके मैसेज सेव करने का सबसे अच्छा तरीका है. सब-कलेक्शन, किसी खास दस्तावेज़ से जुड़ा कलेक्शन होता है.
आपके rooms
कलेक्शन में मौजूद हर कमरे के दस्तावेज़ के लिए, messages
नाम का एक सब-कलेक्शन बनाया जा सकता है:
कमरे
रूमA
name : "my chat room"
मैसेज
message1
from : "alex"
msg : "Hello World!"
message2
...
रूमबी
...
इस उदाहरण में, सब-कलेक्शन में मौजूद एक मैसेज के लिए रेफ़रंस बनाया जाएगा, जिसमें यह कोड मौजूद होगा:
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
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");
Java
Python
Python
C++
DocumentReference message_reference = db->Collection("rooms") .Document("roomA") .Collection("messages") .Document("message1");
Node.js
शुरू करें
PHP
PHP
Cloud Firestore क्लाइंट बनाने और इंस्टॉल करने के बारे में ज़्यादा जानकारी के लिए, Cloud Firestore क्लाइंट लाइब्रेरी देखें.
Unity
DocumentReference documentRef = db .Collection("Rooms").Document("RoomA") .Collection("Messages").Document("Message1");
C#
C#
Cloud Firestore क्लाइंट बनाने और इंस्टॉल करने के बारे में ज़्यादा जानकारी के लिए, Cloud Firestore क्लाइंट लाइब्रेरी देखें.
Ruby
कलेक्शन और दस्तावेज़ों के बीच के पैटर्न पर ध्यान दें. आपके कलेक्शन और दस्तावेज़ों के नाम हमेशा इस पैटर्न के मुताबिक होने चाहिए. किसी कलेक्शन में किसी कलेक्शन या किसी दस्तावेज़ में किसी दस्तावेज़ का रेफ़रंस नहीं दिया जा सकता.
सब-कलेक्शन की मदद से, डेटा को हैरारकी के हिसाब से व्यवस्थित किया जा सकता है. इससे, डेटा को ऐक्सेस करना आसान हो जाता है. roomA
में सभी मैसेज पाने के लिए, सब-कलेक्शन messages
में कलेक्शन रेफ़रंस बनाएं. साथ ही, इसे किसी दूसरे कलेक्शन रेफ़रंस की तरह इस्तेमाल करें.
सब-कलेक्शन में मौजूद दस्तावेज़ों में भी सब-कलेक्शन हो सकते हैं. इससे, डेटा को और नेस्ट किया जा सकता है. डेटा को 100 लेवल तक नेस्ट किया जा सकता है.