क्रम से लगाएं

ब्यौरा

इनपुट किए गए दस्तावेज़ों को, क्रम से लगाने के लिए तय किए गए एक या उससे ज़्यादा तरीकों के हिसाब से क्रम में लगाता है.

उदाहरण

Web

const results = await execute(db.pipeline()
  .collection("books")
  .sort(
    field("release_date").descending(), field("author").ascending()
  )
);
Swift
let results = try await db.pipeline()
  .collection("books")
  .sort([
    Field("release_date").descending(), Field("author").ascending()
  ])
  .execute()

Kotlin

val results = db.pipeline()
    .collection("books")
    .sort(
        field("release_date").descending(),
        field("author").ascending()
    )
    .execute()

Java

Task<Pipeline.Snapshot> results = db.pipeline()
    .collection("books")
    .sort(
        field("release_date").descending(),
        field("author").ascending()
    )
    .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

results = (
    client.pipeline()
    .collection("books")
    .sort(Field.of("release_date").descending(), Field.of("author").ascending())
    .execute()
)
Java
Pipeline.Snapshot results =
    firestore
        .pipeline()
        .collection("books")
        .sort(descending(field("release_date")), ascending(field("author")))
        .execute()
        .get();

व्यवहार

ऑर्डर को क्रम से लगाएं

ऑर्डर को क्रम से लगाने की सेटिंग, Cloud Firestore की वैल्यू टाइप ऑर्डर के हिसाब से काम करती है

नतीजों को क्रम से लगाने का तय तरीका

अगर क्वेरी में sort स्टेज नहीं है, तो दिखाए गए नतीजों को क्रम से लगाने का कोई तय तरीका नहीं होता. साथ ही, हर बार क्वेरी चलाने पर नतीजे अलग-अलग क्रम में दिख सकते हैं. अगर sort स्टेज मौजूद है, लेकिन क्रम से लगाने के एक्सप्रेशन, दिखाए गए नतीजों को क्रम से लगाने का कोई तय तरीका नहीं तय कर पाते हैं, तो हर बार क्वेरी चलाने पर नतीजे अलग-अलग क्रम में दिख सकते हैं.

उदाहरण के लिए, शहरों को उनके country के हिसाब से, बढ़ते क्रम में क्रम से लगाना. इसके लिए, यह डेटासेट इस्तेमाल किया गया है:

{ name: "Los Angeles", state: "CA", country: "USA", population: 3970000 },
{ name: "New York", state: "NY", country: "USA", population: 8530000 }
{ name: "San Francisco", state: "CA", country: "USA", population: 870000 },

डेटासेट में मौजूद तीनों दस्तावेज़ों को किसी भी क्रम में दिखाया जा सकता है, क्योंकि तीनों में country एट्रिब्यूट वैल्यू एक ही है. नतीजों को क्रम से लगाने का कोई तय तरीका तय करने के लिए, ऑर्डर में name के हिसाब से क्रम से लगाने की सेटिंग जोड़ी जा सकती है:

Node.js

const results = await db.pipeline()
  .collection("/cities")
  .sort(field("country").ascending(), fieldd("__name__").ascending())
  .execute();

जब एक से ज़्यादा दस्तावेज़ों में country वैल्यू एक ही होती है, तो टाईब्रेकर के तौर पर, दस्तावेज़ के यूनीक नाम का इस्तेमाल किया जाएगा. ध्यान दें कि नतीजों को क्रम से लगाने का कोई तय तरीका तय करने के लिए, country फ़ील्ड के साथ-साथ किसी अन्य फ़ील्ड का भी इस्तेमाल किया जा सकता है. इन फ़ील्ड की मदद से, कलेक्शन में मौजूद दस्तावेज़ की यूनीक कुंजी बनाई जा सकती है.

एक जैसी वैल्यू को क्रम से लगाना

एक जैसी वैल्यू को एक साथ क्रम से लगाया जाता है. हालांकि, नतीजों को क्रम से लगाने के तय तरीके के बारे में चर्चा के मुताबिक, एक जैसी वैल्यू वाले ग्रुप में नतीजों को क्रम से लगाने का कोई तय तरीका नहीं होता. उदाहरण के लिए, शहरों को उनके size के हिसाब से, बढ़ते क्रम में क्रम से लगाना. इसके लिए, यह डेटासेट इस्तेमाल किया गया है:

{ name: "Los Angeles", state: "CA", country: "USA", size: 3970000 },
{ name: "Mexico City", state: null, country: "Mexico", size: 3970000.0 },

डेटासेट में मौजूद दोनों दस्तावेज़ों को किसी भी क्रम में दिखाया जा सकता है, क्योंकि दोनों दस्तावेज़ों में size वैल्यू 3970000 एक जैसी है.

क्रम से लगाने के लिए एक से ज़्यादा स्टेज

जब क्वेरी में क्रम से लगाने के लिए एक के बाद एक कई स्टेज शामिल होती हैं, तो क्वेरी के नतीजों पर सिर्फ़ क्रम से लगाने की आखिरी स्टेज का असर पड़ता है. ध्यान दें कि यह Core API में orderBy क्लॉज़ के व्यवहार से अलग है.

सबसे ऊपर के N नतीजों को क्रम से लगाने के लिए ऑप्टिमाइज़ेशन

जब sort के बाद limit(...) का इस्तेमाल किया जाता है, तो सबसे ऊपर के n नतीजों को क्रम से लगाने की सेटिंग का इस्तेमाल किया जा सकता है. इस ऑप्टिमाइज़ेशन से, क्रम से लगाने की स्टेज के लिए मेमोरी के इस्तेमाल की सीमा तय की जाती है. ऐसा इसलिए, क्योंकि यह एक बार में सिर्फ़ N दस्तावेज़ों को स्टोर कर सकती है. limit(...) से तय की गई वैल्यू के मुताबिक, क्रम से लगाने की सेटिंग, मेमोरी का कम इस्तेमाल करती है.

Null और मौजूद न होने वाली वैल्यू

अगर क्रम से लगाने के लिए तय किए गए किसी फ़ील्ड का डेटा, किसी दस्तावेज़ में मौजूद नहीं है, तो उसकी वैल्यू को null मानकर क्रम से लगाया जाता है. उदाहरण के लिए, शहरों को उनके state के हिसाब से, बढ़ते क्रम में क्रम से लगाना. इसके लिए, यह डेटासेट इस्तेमाल किया गया है:

{ name: "Los Angeles", state: "CA", country: "USA", population: 3970000 },
{ name: "Mexico City", state: null, country: "Mexico", population: 9200000 },
{ name: "New York", state: "NY", country: "USA", population: 8530000 }
{ name: "San Francisco", state: "CA", country: "USA", population: 870000 },
{ name: "Toronto", country: "Canada", population: 2930000 },

इससे ये नतीजे मिलते हैं. इनमें "टोरंटो" और "मेक्सिको सिटी" वाले दस्तावेज़ों को null मानकर क्रम से लगाया गया है. साथ ही, इन्हें अन्य दस्तावेज़ों से पहले दिखाया गया है.

{ name: "Toronto", country: "Canada", population: 2930000 },
{ name: "Mexico City", state: null, country: "Mexico", population: 9200000 },
{ name: "Los Angeles", state: "CA", country: "USA", population: 3970000 },
{ name: "San Francisco", state: "CA", country: "USA", population: 870000 },
{ name: "New York", state: "NY", country: "USA", population: 8530000 }