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