Cloud Firestore, क्वेरी की बेहतर सुविधा देता है. इससे यह तय किया जा सकता है कि आपको किसी कलेक्शन से कौनसे दस्तावेज़ वापस लाने हैं. इन क्वेरी का इस्तेमाल, get()
या addSnapshotListener()
के साथ भी किया जा सकता है. इस बारे में डेटा पाएं में बताया गया है.
डेटा को क्रम से लगाना और उसकी सीमा तय करना
डिफ़ॉल्ट रूप से, क्वेरी उन सभी दस्तावेज़ों को दस्तावेज़ आईडी के हिसाब से, बढ़ते क्रम में खोजती है जो क्वेरी से मेल खाते हैं. orderBy()
का इस्तेमाल करके, अपने डेटा को क्रम से लगाने का तरीका तय किया जा सकता है. साथ ही, limit()
का इस्तेमाल करके, खोजे गए दस्तावेज़ों की संख्या को सीमित किया जा सकता है. अगर आपने limit()
की वैल्यू दी है, तो वह शून्य से ज़्यादा या उसके बराबर होनी चाहिए.
उदाहरण के लिए, वर्णमाला के हिसाब से पहले तीन शहरों के बारे में जानकारी पाने के लिए, इनमें से कोई एक क्वेरी इस्तेमाल करें:
import { query, orderBy, limit } from "firebase/firestore"; const q = query(citiesRef, orderBy("name"), limit(3));
citiesRef.orderBy("name").limit(3);
citiesRef.order(by: "name").limit(to: 3)
[[citiesRef queryOrderedByField:@"name"] queryLimitedTo:3];
citiesRef.orderBy("name").limit(3)
citiesRef.orderBy("name").limit(3);
final citiesRef = db.collection("cities"); citiesRef.orderBy("name").limit(3);
cities_ref.OrderBy("name").Limit(3);
PHP
Cloud Firestore क्लाइंट को इंस्टॉल करने और बनाने के बारे में ज़्यादा जानने के लिए, Cloud Firestore क्लाइंट लाइब्रेरी देखें.
Query query = citiesRef.OrderBy("Name").Limit(3);
पिछले तीन शहरों की जानकारी पाने के लिए, डेटा को घटते क्रम में भी क्रम से लगाया जा सकता है:
import { query, orderBy, limit } from "firebase/firestore"; const q = query(citiesRef, orderBy("name", "desc"), limit(3));
citiesRef.orderBy("name", "desc").limit(3);
citiesRef.order(by: "name", descending: true).limit(to: 3)
[[citiesRef queryOrderedByField:@"name" descending:YES] queryLimitedTo:3];
citiesRef.orderBy("name", Query.Direction.DESCENDING).limit(3)
citiesRef.orderBy("name", Direction.DESCENDING).limit(3);
final citiesRef = db.collection("cities"); citiesRef.orderBy("name", descending: true).limit(3);
cities_ref.OrderBy("name", Query::Direction::kDescending).Limit(3);
PHP
Cloud Firestore क्लाइंट को इंस्टॉल करने और बनाने के बारे में ज़्यादा जानने के लिए, Cloud Firestore क्लाइंट लाइब्रेरी देखें.
Query query = citiesRef.OrderByDescending("Name").Limit(3);
एक से ज़्यादा फ़ील्ड के हिसाब से भी क्रम में लगाया जा सकता है. उदाहरण के लिए, अगर आपको राज्य के हिसाब से और हर राज्य में आबादी के हिसाब से, घटते क्रम में क्रम से लगाना है, तो:
import { query, orderBy } from "firebase/firestore"; const q = query(citiesRef, orderBy("state"), orderBy("population", "desc"));
citiesRef.orderBy("state").orderBy("population", "desc");
citiesRef .order(by: "state") .order(by: "population", descending: true)
[[citiesRef queryOrderedByField:@"state"] queryOrderedByField:@"population" descending:YES];
citiesRef.orderBy("state").orderBy("population", Query.Direction.DESCENDING)
citiesRef.orderBy("state").orderBy("population", Direction.DESCENDING);
final citiesRef = db.collection("cities"); citiesRef.orderBy("state").orderBy("population", descending: true);
cities_ref.OrderBy("state").OrderBy("name", Query::Direction::kDescending);
PHP
Cloud Firestore क्लाइंट को इंस्टॉल करने और बनाने के बारे में ज़्यादा जानने के लिए, Cloud Firestore क्लाइंट लाइब्रेरी देखें.
Query query = citiesRef.OrderBy("State").OrderByDescending("Population");
where()
फ़िल्टर को orderBy()
और limit()
के साथ जोड़ा जा सकता है. यहां दिए गए उदाहरण में, क्वेरी में जनसंख्या के लिए थ्रेशोल्ड तय किया गया है. साथ ही, जनसंख्या के हिसाब से डेटा को बढ़ते क्रम में क्रम से लगाया गया है. इसमें थ्रेशोल्ड से ज़्यादा जनसंख्या वाले सिर्फ़ कुछ नतीजे दिखाए गए हैं:
import { query, where, orderBy, limit } from "firebase/firestore"; const q = query(citiesRef, where("population", ">", 100000), orderBy("population"), limit(2));
citiesRef.where("population", ">", 100000).orderBy("population").limit(2);
citiesRef .whereField("population", isGreaterThan: 100000) .order(by: "population") .limit(to: 2)
[[[citiesRef queryWhereField:@"population" isGreaterThan:@100000] queryOrderedByField:@"population"] queryLimitedTo:2];
citiesRef.whereGreaterThan("population", 100000).orderBy("population").limit(2)
citiesRef.whereGreaterThan("population", 100000).orderBy("population").limit(2);
final citiesRef = db.collection("cities"); citiesRef .where("population", isGreaterThan: 100000) .orderBy("population") .limit(2);
cities_ref.WhereGreaterThan("population", FieldValue::Integer(100000)) .OrderBy("population") .Limit(2);
PHP
Cloud Firestore क्लाइंट को इंस्टॉल करने और बनाने के बारे में ज़्यादा जानने के लिए, Cloud Firestore क्लाइंट लाइब्रेरी देखें.
Query query = citiesRef .WhereGreaterThan("Population", 2500000) .OrderBy("Population") .Limit(2);
हालांकि, अगर आपके पास रेंज की तुलना करने वाला फ़िल्टर (<
, <=
, >
, >=
) है, तो आपकी पहली क्रम से लगाने की सुविधा उसी फ़ील्ड पर होनी चाहिए. orderBy()
के इस्तेमाल से जुड़ी सीमाओं की सूची यहां देखें.
सीमाएं
orderBy()
क्लॉज़ के लिए, इस पाबंदी का ध्यान रखें:
orderBy()
क्लॉज़, दिए गए फ़ील्ड के मौजूद होने के लिए भी फ़िल्टर करता है. नतीजे के सेट में ऐसे दस्तावेज़ शामिल नहीं होंगे जिनमें दिए गए फ़ील्ड नहीं हैं.
orderBy
और मौजूदगी
किसी फ़ील्ड के हिसाब से क्वेरी को क्रम में लगाने पर, क्वेरी सिर्फ़ उन दस्तावेज़ों को दिखा सकती है जिनमें क्रम से लगाने के लिए फ़ील्ड मौजूद है.
उदाहरण के लिए, नीचे दी गई क्वेरी से ऐसे किसी भी दस्तावेज़ का नतीजा नहीं मिलेगा जिसमें population
फ़ील्ड सेट न हो. भले ही, वह क्वेरी फ़िल्टर से मेल खाता हो.
db.collection("cities").whereEqualTo("country", “USA”).orderBy(“population”);
असमानताओं पर भी इसी तरह का असर पड़ता है. किसी फ़ील्ड पर, असमानता वाले फ़िल्टर वाली क्वेरी का मतलब उस फ़ील्ड के हिसाब से क्रम से लगाने से भी है. यहां दी गई क्वेरी से, ऐसे दस्तावेज़ नहीं मिलते जिनमें population
फ़ील्ड मौजूद न हो. भले ही, उस दस्तावेज़ में country = USA
मौजूद हो. इस समस्या को हल करने के लिए, हर क्रम के लिए अलग-अलग क्वेरी चलाई जा सकती हैं. इसके अलावा, उन सभी फ़ील्ड के लिए वैल्यू असाइन की जा सकती है जिनके हिसाब से क्रम तय किया जाता है.
db.collection(“cities”).where(or(“country”, USA”), greaterThan(“population”, 250000));
ऊपर दी गई क्वेरी में, असमानता के आधार पर क्रम से लगाने का अनुरोध शामिल है. यह क्वेरी, यहां दी गई क्वेरी के बराबर है:
db.collection(“cities”).where(or(“country”, USA”), greaterThan(“population”, 250000)).orderBy(“population”);