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 की तरह दिखते हैं. असल में, वे एक ही हैं. इनमें कुछ अंतर हैं. उदाहरण के लिए, दस्तावेज़ अतिरिक्त डेटा टाइप के साथ काम करते हैं और दस्तावेज़ के साइज़ की सीमा तक सीमित होते हैं. हालांकि, सामान्य तौर पर दस्तावेज़ों को हल्के JSON रिकॉर्ड के तौर पर इस्तेमाल किया जा सकता है.
संग्रह

दस्तावेज़, कलेक्शन में सेव किए जाते हैं. कलेक्शन, दस्तावेज़ों के कंटेनर होते हैं. उदाहरण के लिए, आपके पास users कलेक्शन हो सकता है, जिसमें आपके अलग-अलग उपयोगकर्ता शामिल हों. हर उपयोगकर्ता को एक दस्तावेज़ के तौर पर दिखाया जाता है:
उपयोगकर्ता
alovelace
first : "Ada"
last : "Lovelace"
born : 1815aturing
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
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
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
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 नाम का कलेक्शन बनाया जा सकता है:
कमरे
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
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
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 लेवल तक नेस्ट किया जा सकता है.