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 और ऐप्लिकेशन क्लिप टारगेट पर उपलब्ध नहीं है.
citiesRef.order(by: "name").limit(to: 3)
Objective-C
ध्यान दें: यह प्रॉडक्ट, watchOS और ऐप्लिकेशन क्लिप टारगेट पर उपलब्ध नहीं है.
[[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
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 और ऐप्लिकेशन क्लिप टारगेट पर उपलब्ध नहीं है.
citiesRef.order(by: "name", descending: true).limit(to: 3)
Objective-C
ध्यान दें: यह प्रॉडक्ट, watchOS और ऐप्लिकेशन क्लिप टारगेट पर उपलब्ध नहीं है.
[[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
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 और ऐप्लिकेशन क्लिप टारगेट पर उपलब्ध नहीं है.
citiesRef
  .order(by: "state")
  .order(by: "population", descending: true)
Objective-C
ध्यान दें: यह प्रॉडक्ट, watchOS और ऐप्लिकेशन क्लिप टारगेट पर उपलब्ध नहीं है.
[[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
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 और ऐप्लिकेशन क्लिप टारगेट पर उपलब्ध नहीं है.
citiesRef
  .whereField("population", isGreaterThan: 100000)
  .order(by: "population")
  .limit(to: 2)
Objective-C
ध्यान दें: यह प्रॉडक्ट, watchOS और ऐप्लिकेशन क्लिप टारगेट पर उपलब्ध नहीं है.
[[[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
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 फ़ील्ड मौजूद न हो. भले ही, उस दस्तावेज़ में 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);