Toplama sorgusu, tek bir özet değeri döndürmek için birden çok dizin girişindeki verileri işler.
Cloud Firestore count()
toplama sorgusunu destekler. count()
bir koleksiyon veya sorgudaki belge sayısını belirlemenize olanak tanır. Sunucu, sayımı hesaplar ve yalnızca sonucu (tek bir tamsayı) uygulamanıza iletir, böylece tam sorgunun yürütülmesine kıyasla hem faturalandırılan belge okumalarından hem de aktarılan bayt sayısından tasarruf sağlar.
Toplama sorguları, sorgularınızın halihazırda kullandığı mevcut dizin yapılandırmasına dayanır ve taranan dizin girişi sayısına orantılı olarak ölçeklenir. Bu, küçük ve orta büyüklükteki veri kümelerinin toplanmasının 20-40 ms içinde gerçekleştirildiği, ancak sayılan öğe sayısı arttıkça gecikmenin arttığı anlamına gelir.
count()
toplamasını kullanın
Veri alma bölümünde ayarladığımız örnek verilere bakın.
Aşağıdaki count()
toplaması, cities
koleksiyonundaki toplam şehir sayısını döndürür.
Web modular API
const coll = collection(db, "cities"); const snapshot = await getCountFromServer(coll); console.log('count: ', snapshot.data().count);
Süratli
let query = db.collection("cities") let countQuery = query.count do { let snapshot = try await countQuery.getAggregation(source: .server) print(snapshot.count) } catch { print(error) }
Amaç-C
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"), );
Gitmek
Java
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);
Python
count()
toplaması, sorgudaki filtreleri ve limit
cümlelerini hesaba katar.
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);
Süratli
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) }
Amaç-C
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"), );
Gitmek
Java
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);
Python
Cloud Firestore Güvenlik Kuralları, count()
toplama sorgularında, belgeleri döndüren normal sorgularda olduğu gibi çalışır. Başka bir deyişle, yalnızca kurallarınız istemcilerin belirli koleksiyon veya koleksiyon grubu sorgularını yürütmesine izin veriyorsa, istemciler bu sorgular üzerinde count()
toplamasını da gerçekleştirebilir. Cloud Firestore Güvenlik Kurallarının sorgularla nasıl etkileşim kurduğu hakkında daha fazla bilgi edinin.
Sınırlamalar
count()
toplama sorgusunda aşağıdaki sınırlamalara dikkat edin:
count()
toplama sorguları şu anda yalnızca doğrudan sunucu yanıtı yoluyla desteklenmektedir. Sorgular yalnızca Cloud Firestore arka ucu tarafından sunulur; yerel önbellek ve ara belleğe alınmış güncellemeler atlanır. Bu davranış, Cloud Firestore işlemleri içinde gerçekleştirilen işlemlerle aynıdır. Şu anda gerçek zamanlı dinleyiciler ve çevrimdışı sorgularlacount()
sorgularını kullanamazsınız.Bir
count()
toplaması 60 saniye içinde çözülemezseDEADLINE_EXCEEDED
hatası döndürür. Performans, dizin yapılandırmanıza ve veri kümesinin boyutuna bağlıdır.İşlem 60 saniyelik süre içinde tamamlanamazsa, büyük veri kümeleri için sayaçların kullanılması olası bir geçici çözüm olabilir.
count()
toplaması, dizin girişlerinden okur ve yalnızca dizine alınmış alanları sayar.Sorguya
OrderBy
yan tümcesinin eklenmesi, sayımı sıralama alanının bulunduğu belgelerle sınırlandırır.
Fiyatlandırma
count()
un fiyatlandırması, sorguyla eşleşen dizin girişi sayısına bağlıdır. Çok sayıda eşleşen giriş için az sayıda okuma ücreti ödersiniz.
Daha ayrıntılı fiyatlandırma bilgilerine bakın.