Cloud Firestore एक NoSQL, दस्तावेज़-उन्मुख डेटाबेस है। SQL डेटाबेस के विपरीत, कोई टेबल या पंक्तियाँ नहीं हैं। इसके बजाय, आप डेटा को दस्तावेज़ों में संग्रहीत करते हैं, जो संग्रह में व्यवस्थित होते हैं।
प्रत्येक दस्तावेज़ में कुंजी-मूल्य जोड़े का एक सेट होता है। Cloud Firestore छोटे दस्तावेज़ों के बड़े संग्रह को संग्रहीत करने के लिए अनुकूलित है।
सभी दस्तावेजों को संग्रह में संग्रहित किया जाना चाहिए। दस्तावेज़ों में उप -संग्रह और नेस्टेड ऑब्जेक्ट हो सकते हैं, दोनों में आदिम फ़ील्ड जैसे तार या जटिल ऑब्जेक्ट जैसे सूचियाँ शामिल हो सकते हैं।
क्लाउड फायरस्टोर में संग्रह और दस्तावेज निहित रूप से बनाए जाते हैं। बस एक संग्रह के भीतर किसी दस्तावेज़ को डेटा असाइन करें। यदि संग्रह या दस्तावेज़ मौजूद नहीं है, तो Cloud Firestore इसे बनाता है।
दस्तावेज़
क्लाउड फायरस्टोर में, भंडारण की इकाई दस्तावेज़ है। एक दस्तावेज़ एक हल्का रिकॉर्ड होता है जिसमें फ़ील्ड होते हैं, जो मानों को मैप करते हैं। प्रत्येक दस्तावेज़ को एक नाम से पहचाना जाता है।
उपयोगकर्ता alovelace
का प्रतिनिधित्व करने वाला दस्तावेज़ इस तरह दिख सकता है:
first : "Ada"
last : "Lovelace"
born : 1815
किसी दस्तावेज़ में जटिल, नेस्टेड वस्तुओं को मानचित्र कहा जाता है। उदाहरण के लिए, आप ऊपर दिए गए उदाहरण से उपयोगकर्ता के नाम को मानचित्र के साथ संरचित कर सकते हैं, जैसे:
name :
first : "Ada"
last : "Lovelace"
born : 1815
आप देख सकते हैं कि दस्तावेज़ बहुत कुछ JSON की तरह दिखते हैं। वास्तव में, वे मूल रूप से हैं। कुछ अंतर हैं (उदाहरण के लिए, दस्तावेज़ अतिरिक्त डेटा प्रकारों का समर्थन करते हैं और आकार में 1 एमबी तक सीमित हैं), लेकिन सामान्य तौर पर, आप दस्तावेज़ों को हल्के JSON रिकॉर्ड के रूप में मान सकते हैं।
संग्रह
दस्तावेज़ संग्रह में रहते हैं, जो दस्तावेज़ों के लिए केवल कंटेनर हैं। उदाहरण के लिए, आपके पास अपने विभिन्न उपयोगकर्ताओं को शामिल करने के लिए एक users
संग्रह हो सकता है, प्रत्येक को एक दस्तावेज़ द्वारा दर्शाया जा सकता है:
first : "Ada"
last : "Lovelace"
born : 1815
first : "Alan"
last : "Turing"
born : 1912
Cloud Firestore स्कीमा रहित है, इसलिए आपको इस बात की पूर्ण स्वतंत्रता है कि आप प्रत्येक दस्तावेज़ में कौन-से फ़ील्ड डालते हैं और उन फ़ील्ड में आप किस प्रकार का डेटा संग्रहीत करते हैं। एक ही संग्रह के सभी दस्तावेज़ों में अलग-अलग फ़ील्ड हो सकते हैं या उन फ़ील्ड में विभिन्न प्रकार के डेटा संग्रहीत कर सकते हैं। हालांकि, एकाधिक दस्तावेज़ों में समान फ़ील्ड और डेटा प्रकारों का उपयोग करना एक अच्छा विचार है, ताकि आप दस्तावेज़ों को अधिक आसानी से क्वेरी कर सकें।
एक संग्रह में दस्तावेज़ होते हैं और कुछ नहीं। इसमें मूल्यों के साथ सीधे कच्चे फ़ील्ड नहीं हो सकते हैं, और इसमें अन्य संग्रह नहीं हो सकते हैं। (क्लाउड फायरस्टोर में अधिक जटिल डेटा की संरचना कैसे करें, इसकी व्याख्या के लिए पदानुक्रमित डेटा देखें।)
संग्रह के भीतर दस्तावेजों के नाम अद्वितीय हैं। आप अपनी खुद की चाबियां प्रदान कर सकते हैं, जैसे उपयोगकर्ता आईडी, या आप क्लाउड फायरस्टोर को आपके लिए स्वचालित रूप से यादृच्छिक आईडी बनाने दे सकते हैं।
आपको संग्रह "बनाने" या "हटाने" की आवश्यकता नहीं है। संग्रह में पहला दस्तावेज़ बनाने के बाद, संग्रह मौजूद है। यदि आप किसी संग्रह के सभी दस्तावेज़ हटाते हैं, तो वह अब मौजूद नहीं रहेगा।
संदर्भ
Cloud Firestore में प्रत्येक दस्तावेज़ को डेटाबेस के भीतर उसके स्थान द्वारा विशिष्ट रूप से पहचाना जाता है। पिछले उदाहरण ने संग्रह users
के भीतर एक दस्तावेज़ alovelace
दिखाया। अपने कोड में इस स्थान को संदर्भित करने के लिए, आप इसका एक संदर्भ बना सकते हैं।
Web version 9
import { doc } from "firebase/firestore"; const alovelaceDocumentRef = doc(db, 'users', 'alovelace');
Web version 8
var alovelaceDocumentRef = db.collection('users').doc('alovelace');
तीव्र
let alovelaceDocumentRef = db.collection("users").document("alovelace")
उद्देश्य सी
FIRDocumentReference *alovelaceDocumentRef = [[self.db collectionWithPath:@"users"] documentWithPath:@"alovelace"];
Java
DocumentReference alovelaceDocumentRef = db.collection("users").document("alovelace");
Kotlin+KTX
val alovelaceDocumentRef = db.collection("users").document("alovelace")
Dart
final alovelaceDocumentRef = db.collection("users").doc("alovelace");
जावा
अजगर
Python
सी++
DocumentReference alovelace_document_reference = db->Collection("users").Document("alovelace");
Node.js
जाओ
पीएचपी
$document = $db->collection('samples/php/users')->document('lovelace');
एकता
DocumentReference documentRef = db.Collection("users").Document("alovelace");
सी#
DocumentReference documentRef = db.Collection("users").Document("alovelace");
माणिक
एक संदर्भ एक हल्की वस्तु है जो आपके डेटाबेस में किसी स्थान की ओर इशारा करती है। आप एक संदर्भ बना सकते हैं कि डेटा वहां मौजूद है या नहीं, और एक संदर्भ बनाने से कोई नेटवर्क संचालन नहीं होता है।
आप संग्रह के संदर्भ भी बना सकते हैं:
Web version 9
import { collection } from "firebase/firestore"; const usersCollectionRef = collection(db, 'users');
Web version 8
var usersCollectionRef = db.collection('users');
तीव्र
let usersCollectionRef = db.collection("users")
उद्देश्य सी
FIRCollectionReference *usersCollectionRef = [self.db collectionWithPath:@"users"];
Java
CollectionReference usersCollectionRef = db.collection("users");
Kotlin+KTX
val usersCollectionRef = db.collection("users")
Dart
final usersCollectionRef = db.collection("users");
जावा
अजगर
Python
सी++
CollectionReference users_collection_reference = db->Collection("users");
Node.js
जाओ
पीएचपी
$collection = $db->collection('samples/php/users');
एकता
CollectionReference collectionRef = db.Collection("users");
सी#
CollectionReference collectionRef = db.Collection("users");
माणिक
सुविधा के लिए, आप किसी दस्तावेज़ या संग्रह के पथ को स्ट्रिंग के रूप में निर्दिष्ट करके संदर्भ भी बना सकते हैं, पथ घटकों को फ़ॉरवर्ड स्लैश ( /
) द्वारा अलग किया जाता है। उदाहरण के लिए, alovelace
दस्तावेज़ का संदर्भ बनाने के लिए:
Web version 9
import { doc } from "firebase/firestore"; const alovelaceDocumentRef = doc(db, 'users/alovelace');
Web version 8
var alovelaceDocumentRef = db.doc('users/alovelace');
तीव्र
let aLovelaceDocumentReference = db.document("users/alovelace")
उद्देश्य सी
FIRDocumentReference *aLovelaceDocumentReference = [self.db documentWithPath:@"users/alovelace"];
Java
DocumentReference alovelaceDocumentRef = db.document("users/alovelace");
Kotlin+KTX
val alovelaceDocumentRef = db.document("users/alovelace")
Dart
final aLovelaceDocRef = db.doc("users/alovelace");
जावा
अजगर
Python
सी++
DocumentReference alovelace_document = db->Document("users/alovelace");
Node.js
जाओ
पीएचपी
$document = $db->document('users/lovelace');
एकता
DocumentReference documentRef = db.Document("users/alovelace");
सी#
DocumentReference documentRef = db.Document("users/alovelace");
माणिक
पदानुक्रमित डेटा
यह समझने के लिए कि क्लाउड फायरस्टोर में पदानुक्रमित डेटा संरचनाएं कैसे काम करती हैं, संदेशों और चैट रूम के साथ एक उदाहरण चैट ऐप पर विचार करें।
आप अलग-अलग चैट रूम को स्टोर करने के लिए rooms
नामक संग्रह बना सकते हैं:
name : "my chat room"
...
अब जब आपके पास चैट रूम हैं, तो तय करें कि अपने संदेशों को कैसे स्टोर किया जाए। हो सकता है कि आप उन्हें चैट रूम के दस्तावेज़ में संग्रहीत नहीं करना चाहें। Cloud Firestore में दस्तावेज़ हल्के होने चाहिए, और चैट रूम में बड़ी संख्या में संदेश हो सकते हैं। हालांकि, आप अपने चैट रूम के दस्तावेज़ में उपसंग्रह के रूप में अतिरिक्त संग्रह बना सकते हैं।
उपसंग्रह
इस परिदृश्य में संदेशों को संग्रहीत करने का सबसे अच्छा तरीका उपसंग्रहों का उपयोग करना है। एक उपसंग्रह एक विशिष्ट दस्तावेज़ से जुड़ा एक संग्रह है।
आप अपने rooms
के संग्रह में प्रत्येक कक्ष दस्तावेज़ के लिए messages
नामक एक उपसंग्रह बना सकते हैं:
name : "my chat room"
from : "alex"
msg : "Hello World!"
...
...
इस उदाहरण में, आप निम्न कोड के साथ उपसंग्रह में एक संदेश का संदर्भ बनाएंगे:
Web version 9
import { doc } from "firebase/firestore"; const messageRef = doc(db, "rooms", "roomA", "messages", "message1");
Web version 8
var messageRef = db.collection('rooms').doc('roomA') .collection('messages').doc('message1');
तीव्र
let messageRef = db .collection("rooms").document("roomA") .collection("messages").document("message1")
उद्देश्य सी
FIRDocumentReference *messageRef = [[[[self.db collectionWithPath:@"rooms"] documentWithPath:@"roomA"] collectionWithPath:@"messages"] documentWithPath:@"message1"];
Java
DocumentReference messageRef = db .collection("rooms").document("roomA") .collection("messages").document("message1");
Kotlin+KTX
val messageRef = db .collection("rooms").document("roomA") .collection("messages").document("message1")
Dart
final messageRef = db .collection("rooms") .doc("roomA") .collection("messages") .doc("message1");
जावा
अजगर
Python
सी++
DocumentReference message_reference = db->Collection("rooms") .Document("roomA") .Collection("messages") .Document("message1");
Node.js
जाओ
पीएचपी
$document = $db ->collection('rooms') ->document('roomA') ->collection('messages') ->document('message1');
एकता
DocumentReference documentRef = db .Collection("Rooms").Document("RoomA") .Collection("Messages").Document("Message1");
सी#
DocumentReference documentRef = db .Collection("Rooms").Document("RoomA") .Collection("Messages").Document("Message1");
माणिक
संग्रह और दस्तावेजों के वैकल्पिक पैटर्न पर ध्यान दें। आपके संग्रह और दस्तावेज़ों को हमेशा इस पैटर्न का पालन करना चाहिए। आप संग्रह में संग्रह या दस्तावेज़ में दस्तावेज़ का संदर्भ नहीं दे सकते हैं।
उपसंग्रह आपको डेटा को पदानुक्रम में संरचित करने की अनुमति देते हैं, जिससे डेटा तक पहुंच आसान हो जाती है। roomA
messages
के लिए एक संग्रह संदर्भ बना सकते हैं और इसके साथ बातचीत कर सकते हैं जैसे आप किसी अन्य संग्रह संदर्भ में करेंगे।
उप-संग्रह में दस्तावेज़ों में उप-संग्रह भी हो सकते हैं, जिससे आप डेटा को और अधिक नेस्ट कर सकते हैं। आप डेटा को 100 स्तर तक नेस्ट कर सकते हैं।