Catch up on highlights from Firebase at Google I/O 2023. Learn more

एकत्रीकरण प्रश्नों के साथ दस्तावेजों की गणना करें

एकत्रीकरण क्वेरी एकल सारांश मान वापस करने के लिए एकाधिक अनुक्रमणिका प्रविष्टियों से डेटा संसाधित करती है।

क्लाउड फायरस्टार count() एकत्रीकरण क्वेरी का समर्थन करता है। count() आपको संग्रह या क्वेरी में दस्तावेज़ों की संख्या निर्धारित करने की अनुमति देती है। सर्वर गिनती की गणना करता है, और पूर्ण क्वेरी को निष्पादित करने की तुलना में, बिल किए गए दस्तावेज़ पढ़ने और बाइट ट्रांसफर दोनों पर बचत करते हुए, केवल परिणाम, एक पूर्णांक, आपके ऐप पर वापस भेजता है।

एकत्रीकरण प्रश्न मौजूदा अनुक्रमणिका कॉन्फ़िगरेशन पर निर्भर करते हैं जो आपके प्रश्न पहले से ही उपयोग करते हैं, और स्कैन की गई अनुक्रमणिका प्रविष्टियों की संख्या के अनुपात में स्केल करते हैं। इसका मतलब है कि छोटे से मध्यम आकार के डेटा सेट का एकत्रीकरण 20-40 एमएस के भीतर प्रदर्शन करता है, हालांकि गिनती की गई वस्तुओं की संख्या के साथ विलंबता बढ़ जाती है।

count() एकत्रीकरण का प्रयोग करें

डेटा प्राप्त करने में हमारे द्वारा सेट किए गए उदाहरण डेटा का संदर्भ लें।

निम्नलिखित count() एकत्रीकरण cities के संग्रह में शहरों की कुल संख्या लौटाती है।

Web modular API

const coll = collection(db, "cities");
const snapshot = await getCountFromServer(coll);
console.log('count: ', snapshot.data().count);
तीव्र
नोट: यह उत्पाद वॉचओएस और एप क्लिप लक्ष्यों पर उपलब्ध नहीं है।
let query = db.collection("cities")
let countQuery = query.count
do {
    let snapshot = try await countQuery.getAggregation(source: .server)
    print(snapshot.count)
} catch {
    print(error)
}
उद्देश्य सी
नोट: यह उत्पाद वॉचओएस और एप क्लिप लक्ष्यों पर उपलब्ध नहीं है।
FIRCollectionReference *query = [self.db collectionWithPath:@"cities"];
[query.count aggregationWithSource:FIRAggregateSourceServer
                        completion:^(FIRAggregateQuerySnapshot *snapshot,
                                     NSError *error) {
    if (error != nil) {
        NSLog(@"Error fetching count: %@", error);
    } else {
        NSLog(@"Cities count: %@", snapshot.count);
    }
}];

Java

Query query = db.collection("cities");
AggregateQuery countQuery = query.count();
countQuery.get(AggregateSource.SERVER).addOnCompleteListener(new OnCompleteListener<AggregateQuerySnapshot>() {
    @Override
    public void onComplete(@NonNull Task<AggregateQuerySnapshot> task) {
        if (task.isSuccessful()) {
            // Count fetched successfully
            AggregateQuerySnapshot snapshot = task.getResult();
            Log.d(TAG, "Count: " + snapshot.getCount());
        } else {
            Log.d(TAG, "Count failed: ", task.getException());
        }
    }
});

Kotlin+KTX

val query = db.collection("cities")
val countQuery = query.count()
countQuery.get(AggregateSource.SERVER).addOnCompleteListener { task ->
    if (task.isSuccessful) {
        // Count fetched successfully
        val snapshot = task.result
        Log.d(TAG, "Count: ${snapshot.count}")
    } else {
        Log.d(TAG, "Count failed: ", task.getException())
    }
}

Dart

// Returns number of documents in users collection
db.collection("users").count().get().then(
      (res) => print(res.count),
      onError: (e) => print("Error completing: $e"),
    );
जावा
CollectionReference collection = db.collection("cities");
AggregateQuerySnapshot snapshot = collection.count().get().get();
System.out.println("Count: " + snapshot.getCount());
      
नोड.जेएस
const collectionRef = db.collection('cities');
const snapshot = await collectionRef.count().get();
console.log(snapshot.data().count);
      

count() एकत्रीकरण क्वेरी और किसी भी limit खंड पर किसी भी फ़िल्टर को ध्यान में रखता है। उदाहरण के लिए, निम्नलिखित एकत्रीकरण उन शहरों की संख्या की गणना देता है जहां state CA के बराबर है।

Web modular API

const coll = collection(db, "cities");
const q = query(coll, where("state", "==", "CA"));
const snapshot = await getCountFromServer(q);
console.log('count: ', snapshot.data().count);
तीव्र
नोट: यह उत्पाद वॉचओएस और एप क्लिप लक्ष्यों पर उपलब्ध नहीं है।
let query = db.collection("cities").whereField("state", isEqualTo: "CA")
let countQuery = query.count
do {
    let snapshot = try await countQuery.getAggregation(source: .server)
    print(snapshot.count)
} catch {
    print(error)
}
उद्देश्य सी
नोट: यह उत्पाद वॉचओएस और एप क्लिप लक्ष्यों पर उपलब्ध नहीं है।
FIRQuery *query =
    [[self.db collectionWithPath:@"cities"]
                 queryWhereField:@"state"
                       isEqualTo:@"CA"];
[query.count aggregationWithSource:FIRAggregateSourceServer
                        completion:^(FIRAggregateQuerySnapshot *snapshot,
                                      NSError *error) {
    if (error != nil) {
        NSLog(@"Error fetching count: %@", error);
    } else {
        NSLog(@"Cities count: %@", snapshot.count);
    }
}];

Java

Query query = db.collection("cities").whereEqualTo("state", "CA");
AggregateQuery countQuery = query.count();
countQuery.get(AggregateSource.SERVER).addOnCompleteListener(new OnCompleteListener<AggregateQuerySnapshot>() {
    @Override
    public void onComplete(@NonNull Task<AggregateQuerySnapshot> task) {
        if (task.isSuccessful()) {
            // Count fetched successfully
            AggregateQuerySnapshot snapshot = task.getResult();
            Log.d(TAG, "Count: " + snapshot.getCount());
        } else {
            Log.d(TAG, "Count failed: ", task.getException());
        }
    }
});

Kotlin+KTX

val query = db.collection("cities").whereEqualTo("state", "CA")
val countQuery = query.count()
countQuery.get(AggregateSource.SERVER).addOnCompleteListener { task ->
    if (task.isSuccessful) {
        // Count fetched successfully
        val snapshot = task.result
        Log.d(TAG, "Count: ${snapshot.count}")
    } else {
        Log.d(TAG, "Count failed: ", task.getException())
    }
}

Dart

// This also works with collectionGroup queries.
db.collection("users").where("age", isGreaterThan: 10).count().get().then(
      (res) => print(res.count),
      onError: (e) => print("Error completing: $e"),
    );
जावा
CollectionReference collection = db.collection("cities");
Query query = collection.whereEqualTo("state", "CA");
AggregateQuerySnapshot snapshot = query.count().get().get();
System.out.println("Count: " + snapshot.getCount());
      
नोड.जेएस
const collectionRef = db.collection('cities');
const query = collectionRef.where('state', '==', 'CA');
const snapshot = await query.count().get();
console.log(snapshot.data().count);
      

क्लाउड फायरस्टार सुरक्षा नियम count() एकत्रीकरण प्रश्नों पर उसी तरह काम करते हैं जैसे दस्तावेज़ों को वापस करने वाले सामान्य प्रश्नों पर। दूसरे शब्दों में, यदि और केवल यदि आपके नियम ग्राहकों को कुछ संग्रह या संग्रह समूह प्रश्नों को निष्पादित करने की अनुमति देते हैं, तो ग्राहक उन प्रश्नों पर count() एकत्रीकरण भी कर सकते हैं। इस बारे में अधिक जानें कि क्लाउड फायरस्टोर सुरक्षा नियम प्रश्नों के साथ कैसे इंटरैक्ट करते हैं

सीमाएँ

count() एकत्रीकरण क्वेरी पर निम्नलिखित सीमाओं पर ध्यान दें:

  • count() एकत्रीकरण प्रश्न वर्तमान में केवल प्रत्यक्ष सर्वर प्रतिक्रिया के माध्यम से समर्थित हैं। क्‍वेरी केवल क्‍लाउड फायरस्‍टोर बैकएंड द्वारा सर्व की जाती है, स्‍थानीय कैश और किसी भी बफर अपडेट को छोड़ दिया जाता है। यह व्यवहार Cloud Firestore लेन-देन के भीतर किए गए संचालन के समान है। आप वर्तमान में रीयल-टाइम श्रोताओं और ऑफ़लाइन प्रश्नों के साथ count() प्रश्नों का उपयोग नहीं कर सकते हैं।

  • यदि एक count() एकत्रीकरण 60 सेकंड के भीतर हल नहीं हो सकता है, तो यह एक DEADLINE_EXCEEDED त्रुटि देता है। प्रदर्शन आपके इंडेक्स कॉन्फ़िगरेशन और डेटासेट के आकार पर निर्भर करता है।

    यदि ऑपरेशन 60 सेकंड की समय सीमा के भीतर पूरा नहीं किया जा सकता है, तो बड़े डेटा सेट के लिए काउंटरों का उपयोग करना एक संभावित समाधान है।

  • count() एकत्रीकरण सूचकांक प्रविष्टियों से पढ़ता है और केवल अनुक्रमित क्षेत्रों की गणना करता है।

  • क्वेरी में OrderBy क्लॉज जोड़ने से गिनती उन दस्तावेज़ों तक सीमित हो जाती है जहां सॉर्टिंग फ़ील्ड मौजूद है।

मूल्य निर्धारण

count() क्वेरी द्वारा मिलान की गई अनुक्रमणिका प्रविष्टियों की संख्या पर निर्भर करता है। बड़ी संख्या में मेल खाने वाली प्रविष्टियों के लिए आपसे कम संख्या में पढ़ने का शुल्क लिया जाता है।

अधिक विस्तृत मूल्य निर्धारण जानकारी देखें।