Cloud Firestore की मदद से डेटा ऑर्डर करें और उसे सीमित करें

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
ध्यान दें: यह प्रॉडक्ट, watchOS और App Clip टारगेट पर उपलब्ध नहीं है.
citiesRef.order(by: "name").limit(to: 3)
Objective-C
ध्यान दें: यह प्रॉडक्ट, watchOS और App Clip टारगेट पर उपलब्ध नहीं है.
[[citiesRef queryOrderedByField:@"name"] queryLimitedTo:3];

Kotlin

citiesRef.orderBy("name").limit(3)

Java

citiesRef.orderBy("name").limit(3);

Dart

final citiesRef = db.collection("cities");
citiesRef.orderBy("name").limit(3);
Java
Query query = cities.orderBy("name").limit(3);
Query query = cities.orderBy("name").limitToLast(3);
Python
cities_ref = db.collection("cities")
query = cities_ref.order_by("name").limit_to_last(2)
results = query.get()

Python

cities_ref = db.collection("cities")
query = cities_ref.order_by("name").limit_to_last(2)
results = await query.get()
C++
cities_ref.OrderBy("name").Limit(3);
Node.js
const firstThreeRes = await citiesRef.orderBy('name').limit(3).get();
शुरू करें
query := cities.OrderBy("name", firestore.Asc).Limit(3)
query := cities.OrderBy("name", firestore.Asc).LimitToLast(3)
PHP

PHP

Cloud Firestore क्लाइंट को इंस्टॉल करने और बनाने के बारे में ज़्यादा जानने के लिए, Cloud Firestore क्लाइंट लाइब्रेरी पर जाएं.

$query = $citiesRef->orderBy('name')->limit(3);
Unity
Query query = citiesRef.OrderBy("Name").Limit(3);
C#
Query query = citiesRef.OrderBy("Name").Limit(3);
Ruby
query = cities_ref.order("name").limit(3)

आखिरी तीन शहरों की जानकारी पाने के लिए, घटते क्रम में भी लगाया जा सकता है:

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
ध्यान दें: यह प्रॉडक्ट, watchOS और App Clip टारगेट पर उपलब्ध नहीं है.
citiesRef.order(by: "name", descending: true).limit(to: 3)
Objective-C
ध्यान दें: यह प्रॉडक्ट, watchOS और App Clip टारगेट पर उपलब्ध नहीं है.
[[citiesRef queryOrderedByField:@"name" descending:YES] queryLimitedTo:3];

Kotlin

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
Query query = cities.orderBy("name", Direction.DESCENDING).limit(3);
Python
cities_ref = db.collection("cities")
query = cities_ref.order_by("name", direction=firestore.Query.DESCENDING).limit(3)
results = query.stream()

Python

cities_ref = db.collection("cities")
query = cities_ref.order_by("name", direction=firestore.Query.DESCENDING).limit(3)
results = query.stream()
C++
cities_ref.OrderBy("name", Query::Direction::kDescending).Limit(3);
Node.js
const lastThreeRes = await citiesRef.orderBy('name', 'desc').limit(3).get();
शुरू करें
query := cities.OrderBy("name", firestore.Desc).Limit(3)
PHP

PHP

Cloud Firestore क्लाइंट को इंस्टॉल करने और बनाने के बारे में ज़्यादा जानने के लिए, Cloud Firestore क्लाइंट लाइब्रेरी पर जाएं.

$query = $citiesRef->orderBy('name', 'DESC')->limit(3);
Unity
Query query = citiesRef.OrderByDescending("Name").Limit(3);
C#
Query query = citiesRef.OrderByDescending("Name").Limit(3);
Ruby
query = cities_ref.order("name", "desc").limit(3)

एक से ज़्यादा फ़ील्ड के हिसाब से भी क्रम से लगाया जा सकता है. उदाहरण के लिए, अगर आपको राज्य के हिसाब से क्रम में लगाना है और हर राज्य में जनसंख्या के हिसाब से घटते क्रम में लगाना है, तो:

Web

import { query, orderBy } from "firebase/firestore";  

const q = query(citiesRef, orderBy("state"), orderBy("population", "desc"));

Web

citiesRef.orderBy("state").orderBy("population", "desc");
Swift
ध्यान दें: यह प्रॉडक्ट, watchOS और App Clip टारगेट पर उपलब्ध नहीं है.
citiesRef
  .order(by: "state")
  .order(by: "population", descending: true)
Objective-C
ध्यान दें: यह प्रॉडक्ट, watchOS और App Clip टारगेट पर उपलब्ध नहीं है.
[[citiesRef queryOrderedByField:@"state"] queryOrderedByField:@"population" descending:YES];

Kotlin

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
Query query = cities.orderBy("state").orderBy("population", Direction.DESCENDING);
Python
cities_ref = db.collection("cities")
ordered_city_ref = cities_ref.order_by("state").order_by(
    "population", direction=firestore.Query.DESCENDING
)

Python

cities_ref = db.collection("cities")
cities_ref.order_by("state").order_by(
    "population", direction=firestore.Query.DESCENDING
)
C++
cities_ref.OrderBy("state").OrderBy("name", Query::Direction::kDescending);
Node.js
const byStateByPopRes = await citiesRef.orderBy('state').orderBy('population', 'desc').get();
शुरू करें
query := client.Collection("cities").OrderBy("state", firestore.Asc).OrderBy("population", firestore.Desc)
PHP

PHP

Cloud Firestore क्लाइंट को इंस्टॉल करने और बनाने के बारे में ज़्यादा जानने के लिए, Cloud Firestore क्लाइंट लाइब्रेरी पर जाएं.

$query = $citiesRef->orderBy('state')->orderBy('population', 'DESC');
Unity
Query query = citiesRef.OrderBy("State").OrderByDescending("Population");
C#
Query query = citiesRef.OrderBy("State").OrderByDescending("Population");
Ruby
query = cities_ref.order("state").order("population", "desc")

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
ध्यान दें: यह प्रॉडक्ट, watchOS और App Clip टारगेट पर उपलब्ध नहीं है.
citiesRef
  .whereField("population", isGreaterThan: 100000)
  .order(by: "population")
  .limit(to: 2)
Objective-C
ध्यान दें: यह प्रॉडक्ट, watchOS और App Clip टारगेट पर उपलब्ध नहीं है.
[[[citiesRef queryWhereField:@"population" isGreaterThan:@100000]
    queryOrderedByField:@"population"]
    queryLimitedTo:2];

Kotlin

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
Query query = cities.whereGreaterThan("population", 2500000L).orderBy("population").limit(2);
Python
cities_ref = db.collection("cities")
query = (
    cities_ref.where(filter=FieldFilter("population", ">", 2500000))
    .order_by("population")
    .limit(2)
)
results = query.stream()

Python

cities_ref = db.collection("cities")
query = (
    cities_ref.where(filter=FieldFilter("population", ">", 2500000))
    .order_by("population")
    .limit(2)
)
results = query.stream()
C++
cities_ref.WhereGreaterThan("population", FieldValue::Integer(100000))
    .OrderBy("population")
    .Limit(2);
Node.js
const biggestRes = await citiesRef.where('population', '>', 2500000)
  .orderBy('population').limit(2).get();
शुरू करें
query := cities.Where("population", ">", 2500000).OrderBy("population", firestore.Desc).Limit(2)
PHP

PHP

Cloud Firestore क्लाइंट को इंस्टॉल करने और बनाने के बारे में ज़्यादा जानने के लिए, Cloud Firestore क्लाइंट लाइब्रेरी पर जाएं.

$query = $citiesRef
    ->where('population', '>', 2500000)
    ->orderBy('population')
    ->limit(2);
Unity
Query query = citiesRef
    .WhereGreaterThan("Population", 2500000)
    .OrderBy("Population")
    .Limit(2);
C#
Query query = citiesRef
    .WhereGreaterThan("Population", 2500000)
    .OrderBy("Population")
    .Limit(2);
Ruby
query = cities_ref.where("population", ">", 2_500_000).order("population").limit(2)

हालांकि, अगर आपके पास रेंज की तुलना करने वाला फ़िल्टर (<, <=, >, >=) है, तो आपको पहले उसी फ़ील्ड के हिसाब से क्रम से लगाना होगा. orderBy() से जुड़ी पाबंदियों की सूची यहां दी गई है.

सीमाएं

orderBy() क्लॉज़ के लिए, यहां दी गई पाबंदी का ध्यान रखें:

orderBy और उसके अस्तित्व के बारे में

किसी फ़ील्ड के हिसाब से क्वेरी को क्रम से लगाने पर, क्वेरी सिर्फ़ उन दस्तावेज़ों को दिखा सकती है जिनमें क्रम से लगाने वाला फ़ील्ड मौजूद है.

उदाहरण के लिए, इस क्वेरी से ऐसे दस्तावेज़ नहीं मिलेंगे जिनमें population फ़ील्ड सेट नहीं है. भले ही, वे क्वेरी फ़िल्टर की अन्य शर्तों को पूरा करते हों.

Java
db.collection("cities").whereEqualTo("country", USA).orderBy(population);

इसी तरह का एक और इफ़ेक्ट, असमानताओं पर लागू होता है. किसी फ़ील्ड पर असमानता फ़िल्टर वाली क्वेरी का मतलब यह भी है कि उस फ़ील्ड के हिसाब से क्रम से लगाया गया है. नीचे दी गई क्वेरी, 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);