একত্রিত প্রশ্ন সহ নথি গণনা

একটি সমষ্টিগত প্রশ্ন একাধিক সূচক এন্ট্রি থেকে ডেটা প্রক্রিয়া করে একটি একক সারাংশ মান ফেরত দেয়।

ক্লাউড ফায়ারস্টোর count() একত্রীকরণ প্রশ্ন সমর্থন করে। count() আপনাকে একটি সংগ্রহ বা অনুসন্ধানে নথির সংখ্যা নির্ধারণ করতে দেয়। সার্ভারটি গণনা গণনা করে, এবং সম্পূর্ণ ক্যোয়ারী চালানোর তুলনায়, শুধুমাত্র একটি একক পূর্ণসংখ্যার ফলাফল আপনার অ্যাপে ফেরত পাঠায়, বিল করা ডকুমেন্ট রিড এবং ট্রান্সফার করা বাইট উভয়েই সংরক্ষণ করে।

সমষ্টিগত প্রশ্নগুলি বিদ্যমান সূচক কনফিগারেশনের উপর নির্ভর করে যা আপনার প্রশ্নগুলি ইতিমধ্যেই ব্যবহার করে এবং স্ক্যান করা সূচক এন্ট্রির সংখ্যার সমানুপাতিকভাবে স্কেল করে৷ এর মানে হল ছোট থেকে মাঝারি আকারের ডেটা সেটের সমষ্টি 20-40 ms এর মধ্যে কাজ করে, যদিও আইটেম গণনা করা সংখ্যার সাথে লেটেন্সি বৃদ্ধি পায়।

count() সমষ্টি ব্যবহার করুন

আমরা ডেটা গেটিং -এ যে ডেটা সেট আপ করেছি তার উদাহরণ পড়ুন।

নিম্নলিখিত count() সমষ্টি cities সংগ্রহে মোট শহরের সংখ্যা প্রদান করে৷

Web modular API

const coll = collection(db, "cities");
const snapshot = await getCountFromServer(coll);
console.log('count: ', snapshot.data().count);
সুইফট
দ্রষ্টব্য: এই পণ্যটি watchOS এবং অ্যাপ ক্লিপ লক্ষ্যে উপলব্ধ নয়।
let query = db.collection("cities")
let countQuery = query.count
do {
    let snapshot = try await countQuery.getAggregation(source: .server)
    print(snapshot.count)
} catch {
    print(error)
}
উদ্দেশ্য গ
দ্রষ্টব্য: এই পণ্যটি watchOS এবং অ্যাপ ক্লিপ লক্ষ্যে উপলব্ধ নয়।
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"),
    );
যাওয়া
package firestore

import (
	"context"
	"errors"
	"fmt"
	"io"

	"cloud.google.com/go/firestore"
	firestorepb "cloud.google.com/go/firestore/apiv1/firestorepb"
)

func createCountQuery(w io.Writer, projectID string) error {

	// Instantiate the client
	ctx := context.Background()
	client, err := firestore.NewClient(ctx, projectID)
	if err != nil {
		return err
	}
	defer client.Close()

	collection := client.Collection("users")
	query := collection.Where("born", ">", 1850)

	// `alias` argument--"all"--provides a key for accessing the aggregate query
	// results. The alias value must be unique across all aggregation aliases in
	// an aggregation query and must conform to allowed Document field names.
	//
	// See https://cloud.google.com/firestore/docs/reference/rpc/google.firestore.v1#document for details.
	aggregationQuery := query.NewAggregationQuery().WithCount("all")
	results, err := aggregationQuery.Get(ctx)
	if err != nil {
		return err
	}

	count, ok := results["all"]
	if !ok {
		return errors.New("firestore: couldn't get alias for COUNT from results")
	}

	countValue := count.(*firestorepb.Value)
	fmt.Fprintf(w, "Number of results from query: %d\n", countValue.GetIntegerValue())
	return nil
}
জাভা
CollectionReference collection = db.collection("cities");
AggregateQuerySnapshot snapshot = collection.count().get().get();
System.out.println("Count: " + snapshot.getCount());
      
Node.js
const collectionRef = db.collection('cities');
const snapshot = await collectionRef.count().get();
console.log(snapshot.data().count);
      
পাইথন
from google.cloud import firestore
from google.cloud.firestore_v1 import aggregation
from google.cloud.firestore_v1.base_query import FieldFilter


def create_count_query(project_id: str) -> None:
    """Builds an aggregate query that returns the number of results in the query.

    Arguments:
      project_id: your Google Cloud Project ID
    """
    client = firestore.Client(project=project_id)

    collection_ref = client.collection("users")
    query = collection_ref.where(filter=FieldFilter("born", ">", 1800))
    aggregate_query = aggregation.AggregationQuery(query)

    # `alias` to provides a key for accessing the aggregate query results
    aggregate_query.count(alias="all")

    results = aggregate_query.get()
    for result in results:
        print(f"Alias of results from query: {result[0].alias}")
        print(f"Number of results from query: {result[0].value}")

count() একত্রীকরণ ক্যোয়ারীতে থাকা যেকোন ফিল্টার এবং যেকোন limit ধারা বিবেচনা করে।

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);
সুইফট
দ্রষ্টব্য: এই পণ্যটি watchOS এবং অ্যাপ ক্লিপ লক্ষ্যে উপলব্ধ নয়।
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)
}
উদ্দেশ্য গ
দ্রষ্টব্য: এই পণ্যটি watchOS এবং অ্যাপ ক্লিপ লক্ষ্যে উপলব্ধ নয়।
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"),
    );
যাওয়া
package firestore

import (
	"context"
	"errors"
	"fmt"
	"io"

	"cloud.google.com/go/firestore"
	firestorepb "cloud.google.com/go/firestore/apiv1/firestorepb"
)

func createCountQuery(w io.Writer, projectID string) error {

	// Instantiate the client
	ctx := context.Background()
	client, err := firestore.NewClient(ctx, projectID)
	if err != nil {
		return err
	}
	defer client.Close()

	collection := client.Collection("users")
	query := collection.Where("born", ">", 1850)

	// `alias` argument--"all"--provides a key for accessing the aggregate query
	// results. The alias value must be unique across all aggregation aliases in
	// an aggregation query and must conform to allowed Document field names.
	//
	// See https://cloud.google.com/firestore/docs/reference/rpc/google.firestore.v1#document for details.
	aggregationQuery := query.NewAggregationQuery().WithCount("all")
	results, err := aggregationQuery.Get(ctx)
	if err != nil {
		return err
	}

	count, ok := results["all"]
	if !ok {
		return errors.New("firestore: couldn't get alias for COUNT from results")
	}

	countValue := count.(*firestorepb.Value)
	fmt.Fprintf(w, "Number of results from query: %d\n", countValue.GetIntegerValue())
	return nil
}
জাভা
CollectionReference collection = db.collection("cities");
Query query = collection.whereEqualTo("state", "CA");
AggregateQuerySnapshot snapshot = query.count().get().get();
System.out.println("Count: " + snapshot.getCount());
      
Node.js
const collectionRef = db.collection('cities');
const query = collectionRef.where('state', '==', 'CA');
const snapshot = await query.count().get();
console.log(snapshot.data().count);
      
পাইথন
from google.cloud import firestore
from google.cloud.firestore_v1 import aggregation
from google.cloud.firestore_v1.base_query import FieldFilter


def create_count_query(project_id: str) -> None:
    """Builds an aggregate query that returns the number of results in the query.

    Arguments:
      project_id: your Google Cloud Project ID
    """
    client = firestore.Client(project=project_id)

    collection_ref = client.collection("users")
    query = collection_ref.where(filter=FieldFilter("born", ">", 1800))
    aggregate_query = aggregation.AggregationQuery(query)

    # `alias` to provides a key for accessing the aggregate query results
    aggregate_query.count(alias="all")

    results = aggregate_query.get()
    for result in results:
        print(f"Alias of results from query: {result[0].alias}")
        print(f"Number of results from query: {result[0].value}")

ক্লাউড ফায়ারস্টোর সুরক্ষা নিয়মগুলি নথিগুলি ফেরত দেওয়া সাধারণ প্রশ্নগুলির মতোই count() একত্রিতকরণ প্রশ্নের ক্ষেত্রে একই কাজ করে৷ অন্য কথায়, যদি এবং শুধুমাত্র যদি আপনার নিয়মগুলি ক্লায়েন্টদের নির্দিষ্ট সংগ্রহ বা সংগ্রহের গ্রুপ প্রশ্নগুলি চালানোর অনুমতি দেয়, ক্লায়েন্টরাও সেই প্রশ্নগুলির উপর count() একত্রীকরণ সম্পাদন করতে পারে। ক্লাউড ফায়ারস্টোর সুরক্ষা নিয়মগুলি প্রশ্নের সাথে কীভাবে ইন্টারঅ্যাক্ট করে সে সম্পর্কে আরও জানুন৷

সীমাবদ্ধতা

count() একত্রীকরণ প্রশ্নে নিম্নলিখিত সীমাবদ্ধতাগুলি নোট করুন:

  • count() সমষ্টিগত প্রশ্ন বর্তমানে শুধুমাত্র সরাসরি সার্ভার প্রতিক্রিয়ার মাধ্যমে সমর্থিত। স্থানীয় ক্যাশে এবং বাফার করা আপডেটগুলি এড়িয়ে গিয়ে শুধুমাত্র ক্লাউড ফায়ারস্টোর ব্যাকএন্ড দ্বারা প্রশ্নগুলি পরিবেশন করা হয়। এই আচরণটি ক্লাউড ফায়ারস্টোর লেনদেনের মধ্যে সম্পাদিত ক্রিয়াকলাপের অনুরূপ। আপনি বর্তমানে রিয়েল-টাইম শ্রোতা এবং অফলাইন প্রশ্নগুলির সাথে count() প্রশ্নগুলি ব্যবহার করতে পারবেন না৷

  • যদি একটি count() সমষ্টি 60 সেকেন্ডের মধ্যে সমাধান করতে না পারে, তাহলে এটি একটি DEADLINE_EXCEEDED ত্রুটি প্রদান করে৷ কর্মক্ষমতা আপনার সূচক কনফিগারেশন এবং ডেটাসেটের আকারের উপর নির্ভর করে।

    যদি অপারেশনটি 60 সেকেন্ডের সময়সীমার মধ্যে সম্পন্ন করা না যায়, তাহলে একটি সম্ভাব্য সমাধান হল বড় ডেটা সেটের জন্য কাউন্টার ব্যবহার করা।

  • count() সমষ্টি সূচী এন্ট্রি থেকে পড়ে এবং শুধুমাত্র সূচীকৃত ক্ষেত্র গণনা করে।

  • ক্যোয়ারীতে একটি OrderBy ক্লজ যোগ করা নথিতে গণনা সীমিত করে যেখানে বাছাই ক্ষেত্রটি বিদ্যমান।

মূল্য নির্ধারণ

count() এর মূল্য নির্ভর করে ক্যোয়ারী দ্বারা মিলিত সূচক এন্ট্রির সংখ্যার উপর। প্রচুর সংখ্যক মিলে যাওয়া এন্ট্রির জন্য আপনাকে অল্প সংখ্যক পড়ার জন্য চার্জ করা হয়।

আরো বিস্তারিত মূল্য তথ্য দেখুন.