একটি সমষ্টিগত প্রশ্ন একাধিক সূচক এন্ট্রি থেকে ডেটা প্রক্রিয়া করে একটি একক সারাংশ মান ফেরত দেয়।
ক্লাউড ফায়ারস্টোর নিম্নলিখিত সমষ্টিগত প্রশ্নগুলিকে সমর্থন করে:
-
count()
-
sum()
-
average()
ক্লাউড ফায়ারস্টোর সমষ্টি গণনা করে এবং শুধুমাত্র ফলাফল আপনার অ্যাপে প্রেরণ করে। একটি সম্পূর্ণ ক্যোয়ারী চালানো এবং আপনার অ্যাপে একত্রীকরণ গণনা করার তুলনায়, সমষ্টিগত প্রশ্নগুলি বিল করা ডকুমেন্ট রিড এবং ট্রান্সফার করা বাইট উভয়েই সংরক্ষণ করে।
সমষ্টিগত প্রশ্নগুলি বিদ্যমান সূচক কনফিগারেশনের উপর নির্ভর করে যা আপনার প্রশ্নগুলি ইতিমধ্যেই ব্যবহার করে এবং স্ক্যান করা সূচক এন্ট্রির সংখ্যার সমানুপাতিকভাবে স্কেল করে৷ সমষ্টিতে আইটেমের সংখ্যার সাথে লেটেন্সি বাড়ে।
count()
সমষ্টি ব্যবহার করুন
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());
Node.js
const collectionRef = db.collection('cities'); const snapshot = await collectionRef.count().get(); console.log(snapshot.data().count);
পাইথন
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);
সুইফট
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());
Node.js
const collectionRef = db.collection('cities'); const query = collectionRef.where('state', '==', 'CA'); const snapshot = await query.count().get(); console.log(snapshot.data().count);
পাইথন
sum()
সমষ্টি ব্যবহার করুন
প্রদত্ত প্রশ্নের সাথে মেলে এমন সাংখ্যিক মানের মোট যোগফল ফেরাতে sum()
সমষ্টি ব্যবহার করুন-উদাহরণস্বরূপ:
Web modular API
const coll = collection(firestore, 'cities'); const snapshot = await getAggregateFromServer(coll, { totalPopulation: sum('population') }); console.log('totalPopulation: ', snapshot.data().totalPopulation);
জাভা
collection = db.collection("cities"); snapshot = collection.aggregate(sum("population")).get().get(); System.out.println("Sum: " + snapshot.get(sum("population")));
Node.js
const coll = firestore.collection('cities'); const sumAggregateQuery = coll.aggregate({ totalPopulation: AggregateField.sum('population'), }); const snapshot = await sumAggregateQuery.get(); console.log('totalPopulation: ', snapshot.data().totalPopulation);
sum()
কোয়েরির যেকোন ফিল্টার এবং যেকোন সীমাবদ্ধতাকে বিবেচনা করে—উদাহরণস্বরূপ:
Web modular API
const coll = collection(firestore, 'cities'); const q = query(coll, where('capital', '==', true)); const snapshot = await getAggregateFromServer(q, { totalPopulation: sum('population') }); console.log('totalPopulation: ', snapshot.data().totalPopulation);
জাভা
collection = db.collection("cities"); query = collection.whereEqualTo("state", "CA"); snapshot = query.aggregate(sum("population")).get().get(); System.out.println("Sum: " + snapshot.get(sum("population")));
Node.js
const coll = firestore.collection('cities'); const q = coll.where("capital", "==", true); const sumAggregateQuery = q.aggregate({ totalPopulation: AggregateField.sum('population'), }); const snapshot = await sumAggregateQuery.get(); console.log('totalPopulation: ', snapshot.data().totalPopulation);
average()
সমষ্টি ব্যবহার করুন
প্রদত্ত প্রশ্নের সাথে মেলে এমন সাংখ্যিক মানের গড় ফেরত দিতে average()
সমষ্টি ব্যবহার করুন—উদাহরণস্বরূপ:
Web modular API
const coll = collection(firestore, 'cities'); const snapshot = await getAggregateFromServer(coll, { averagePopulation: average('population') }); console.log('averagePopulation: ', snapshot.data().averagePopulation);
জাভা
collection = db.collection("cities"); snapshot = collection.aggregate(average("population")).get().get(); System.out.println("Average: " + snapshot.get(average("population")));
Node.js
const coll = firestore.collection('cities'); const averageAggregateQuery = coll.aggregate({ averagePopulation: AggregateField.average('population'), }); const snapshot = await averageAggregateQuery.get(); console.log('averagePopulation: ', snapshot.data().averagePopulation);
average()
সমষ্টি কোয়েরির যেকোনো ফিল্টার এবং যেকোনো সীমাবদ্ধতাকে বিবেচনা করে—উদাহরণস্বরূপ:
Web modular API
const coll = collection(firestore, 'cities'); const q = query(coll, where('capital', '==', true)); const snapshot = await getAggregateFromServer(q, { averagePopulation: average('population') }); console.log('averagePopulation: ', snapshot.data().averagePopulation);
জাভা
collection = db.collection("cities"); query = collection.whereEqualTo("state", "CA"); snapshot = query.aggregate(average("population")).get().get(); System.out.println("Average: " + snapshot.get(average("population")));
Node.js
const coll = firestore.collection('cities'); const q = coll.where("capital", "==", true); const averageAggregateQuery = q.aggregate({ averagePopulation: AggregateField.average('population'), }); const snapshot = await averageAggregateQuery.get(); console.log('averagePopulation: ', snapshot.data().averagePopulation);
একটি প্রশ্নে একাধিক সমষ্টি গণনা করুন
আপনি একটি একত্রীকরণ পাইপলাইনে একাধিক সমষ্টি একত্রিত করতে পারেন। এটি প্রয়োজনীয় সূচক পড়ার সংখ্যা কমাতে পারে। যদি ক্যোয়ারীতে একাধিক ক্ষেত্রে সমষ্টি অন্তর্ভুক্ত থাকে, তাহলে ক্যোয়ারীটির জন্য একটি যৌগিক সূচকের প্রয়োজন হতে পারে। সেই ক্ষেত্রে, ক্লাউড ফায়ারস্টোর একটি সূচক প্রস্তাব করে।
নিম্নলিখিত উদাহরণটি একটি একক সমষ্টি অনুসন্ধানে একাধিক সমষ্টি সম্পাদন করে:
Web modular API
const coll = collection(firestore, 'cities'); const snapshot = await getAggregateFromServer(coll, { countOfDocs: count(), totalPopulation: sum('population'), averagePopulation: average('population') }); console.log('countOfDocs: ', snapshot.data().countOfDocs); console.log('totalPopulation: ', snapshot.data().totalPopulation); console.log('averagePopulation: ', snapshot.data().averagePopulation);
জাভা
collection = db.collection("cities"); query = collection.whereEqualTo("state", "CA"); AggregateQuery aggregateQuery = query.aggregate(count(), sum("population"), average("population")); snapshot = aggregateQuery.get().get(); System.out.println("Count: " + snapshot.getCount()); System.out.println("Sum: " + snapshot.get(sum("population"))); System.out.println("Average: " + snapshot.get(average("population")));
Node.js
const coll = firestore.collection('cities'); const aggregateQuery = coll.aggregate({ countOfDocs: AggregateField.count(), totalPopulation: AggregateField.sum('population'), averagePopulation: AggregateField.average('population') }); const snapshot = await aggregateQuery.get(); console.log('countOfDocs: ', snapshot.data().countOfDocs); console.log('totalPopulation: ', snapshot.data().totalPopulation); console.log('averagePopulation: ', snapshot.data().averagePopulation);
একাধিক একত্রীকরণের সাথে ক্যোয়ারীতে শুধুমাত্র সেই ডকুমেন্টগুলি অন্তর্ভুক্ত থাকে যাতে প্রতিটি একত্রিতকরণের সমস্ত ক্ষেত্র থাকে। এটি পৃথকভাবে প্রতিটি একত্রীকরণ সঞ্চালন থেকে ভিন্ন ফলাফল হতে পারে।
একত্রিত প্রশ্নের জন্য নিরাপত্তা নিয়ম
ক্লাউড ফায়ারস্টোর নিরাপত্তা বিধিগুলি নথিগুলি ফেরত দেওয়া প্রশ্নগুলির মতোই একত্রিত প্রশ্নের ক্ষেত্রে একই কাজ করে৷ অন্য কথায়, যদি এবং শুধুমাত্র যদি আপনার নিয়মগুলি ক্লায়েন্টদের নির্দিষ্ট সংগ্রহ বা সংগ্রহ গ্রুপের প্রশ্নগুলি চালানোর অনুমতি দেয়, ক্লায়েন্টরাও সেই প্রশ্নগুলির উপর একত্রীকরণ সম্পাদন করতে পারে। ক্লাউড ফায়ারস্টোর সুরক্ষা নিয়মগুলি প্রশ্নের সাথে কীভাবে ইন্টারঅ্যাক্ট করে সে সম্পর্কে আরও জানুন৷
আচরণ এবং সীমাবদ্ধতা
আপনি যখন সমষ্টিগত প্রশ্নগুলির সাথে কাজ করেন, নিম্নলিখিত আচরণ এবং সীমাবদ্ধতাগুলি নোট করুন:
আপনি রিয়েল-টাইম শ্রোতা এবং অফলাইন প্রশ্নের সাথে একত্রিত প্রশ্নগুলি ব্যবহার করতে পারবেন না। একত্রিত প্রশ্ন শুধুমাত্র সরাসরি সার্ভার প্রতিক্রিয়া মাধ্যমে সমর্থিত হয়. স্থানীয় ক্যাশে এবং বাফার করা আপডেটগুলি এড়িয়ে গিয়ে শুধুমাত্র ক্লাউড ফায়ারস্টোর ব্যাকএন্ড দ্বারা প্রশ্নগুলি পরিবেশন করা হয়। এই আচরণটি ক্লাউড ফায়ারস্টোর লেনদেনের মধ্যে সম্পাদিত ক্রিয়াকলাপের অনুরূপ।
যদি একটি সমষ্টি 60 সেকেন্ডের মধ্যে সমাধান করতে না পারে তবে এটি একটি
DEADLINE_EXCEEDED
ত্রুটি প্রদান করে৷ কর্মক্ষমতা আপনার সূচক কনফিগারেশন এবং ডেটাসেটের আকারের উপর নির্ভর করে।যদি অপারেশনটি 60 সেকেন্ডের সময়সীমার মধ্যে সম্পন্ন করা না যায়, তাহলে একটি সম্ভাব্য সমাধান হল বড় ডেটাসেটের জন্য কাউন্টার ব্যবহার করা।
সমষ্টিগত প্রশ্নগুলি সূচী এন্ট্রি থেকে পড়ে এবং শুধুমাত্র সূচীকৃত ক্ষেত্রগুলি অন্তর্ভুক্ত করে।
একটি একত্রিতকরণ ক্যোয়ারীতে একটি
OrderBy
ক্লজ যোগ করা নথিতে একত্রীকরণকে সীমাবদ্ধ করে যেখানে বাছাই ক্ষেত্রটি বিদ্যমান।sum()
এবংaverage()
সমষ্টির জন্য, অ-সাংখ্যিক মান উপেক্ষা করা হয়।sum()
এবংaverage()
সমষ্টি শুধুমাত্র পূর্ণসংখ্যা মান এবং ফ্লোটিং-পয়েন্ট সংখ্যা মান বিবেচনা করে।একটি একক ক্যোয়ারীতে একাধিক সমষ্টিকে একত্রিত করার সময়, মনে রাখবেন যে
sum()
এবংaverage()
অ-সাংখ্যিক মানগুলি উপেক্ষা করে যখনcount()
অ-সাংখ্যিক মান অন্তর্ভুক্ত করে।আপনি যদি বিভিন্ন ক্ষেত্রের সমষ্টিগুলিকে একত্রিত করেন, তাহলে গণনার মধ্যে শুধুমাত্র সেই সমস্ত ক্ষেত্রগুলি থাকা নথিগুলি অন্তর্ভুক্ত থাকে৷
মূল্য নির্ধারণ
সমষ্টিগত প্রশ্নের জন্য মূল্য নির্ধারণ ক্যোয়ারী দ্বারা মিলিত সূচক এন্ট্রির সংখ্যার উপর নির্ভর করে। প্রচুর সংখ্যক মিলে যাওয়া এন্ট্রির জন্য আপনাকে অল্প সংখ্যক পড়ার জন্য চার্জ করা হয়।
আরো বিস্তারিত মূল্য তথ্য দেখুন.