Sorgu ve where
- Flutter kursu
- İleri seviye
- Ders 24/69
- 4 dk
where ile filtreli sorgu yapmayı öğrenirsin.
where ile filtreleme
where metodu, koleksiyondaki belgeleri bir alana göre filtreler. Örneğin where('sender', isEqualTo: 'Ali') yalnızca gönderen Ali olan belgeleri döndürür. where bir Query döndürür; bu nesne üzerinde snapshots veya get çağrılır.
db.collection('messages')
.where('sender', isEqualTo: 'Ali')
.snapshots();Zincirleme sorgular
Birden çok where çağrısı zincirleyerek daha spesifik filtreler oluşturabilirsin. orderBy ile sıralama, limit ile belge sayısını kısıtlayabilirsin. Sorgu nesnesi değişmez olduğu için her çağrı yeni bir sorgu döndürür.
db.collection('messages')
.where('sender', isEqualTo: 'Ali')
.where('read', isEqualTo: false)
.snapshots();Uygulama Filtreli sorgu dinle
Db al. 'messages' koleksiyonunda where('sender', isEqualTo: 'Ali') filtresini uygula ve snapshots akışını dinle. Her snapshot'ta belge sayısını yazdır. 10 milisaniye bekle.
Başlangıç kodu
class QueryDocumentSnapshot {
final Map<String, dynamic> data;
QueryDocumentSnapshot(this.data);
}
class QuerySnapshot {
final List<QueryDocumentSnapshot> docs;
QuerySnapshot(this.docs);
}
class Query {
final List<QueryDocumentSnapshot> docs;
Query(this.docs);
Stream<QuerySnapshot> snapshots() async* {
yield QuerySnapshot(docs);
}
}
class CollectionReference {
final String name;
CollectionReference(this.name);
Query where(String field, {required String isEqualTo}) {
return Query([
QueryDocumentSnapshot({'sender': isEqualTo, 'text': 'Merhaba'}),
]);
}
}
class FirebaseFirestore {
static final FirebaseFirestore instance = FirebaseFirestore._();
FirebaseFirestore._();
CollectionReference collection(String name) => CollectionReference(name);
}
void main() async {
// where ile filtrele, snapshots dinle
// her snapshot'ta belge sayısını yazdır
}Örnek çözüm
class QueryDocumentSnapshot {
final Map<String, dynamic> data;
QueryDocumentSnapshot(this.data);
}
class QuerySnapshot {
final List<QueryDocumentSnapshot> docs;
QuerySnapshot(this.docs);
}
class Query {
final List<QueryDocumentSnapshot> docs;
Query(this.docs);
Stream<QuerySnapshot> snapshots() async* {
yield QuerySnapshot(docs);
}
}
class CollectionReference {
final String name;
CollectionReference(this.name);
Query where(String field, {required String isEqualTo}) {
return Query([
QueryDocumentSnapshot({'sender': isEqualTo, 'text': 'Merhaba'}),
]);
}
}
class FirebaseFirestore {
static final FirebaseFirestore instance = FirebaseFirestore._();
FirebaseFirestore._();
CollectionReference collection(String name) => CollectionReference(name);
}
void main() async {
final db = FirebaseFirestore.instance;
db.collection('messages')
.where('sender', isEqualTo: 'Ali')
.snapshots()
.listen((snap) {
print(snap.docs.length);
});
await Future.delayed(Duration(milliseconds: 10));
}Beklenen çıktı
1
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 where('sender', isEqualTo: 'Ali') ne yapar?
- Tüm belgeleri siler
- Yalnızca sender alanı Ali olan belgeleri seçer Doğru cevap
- Belgeleri tarihe göre sıralar
- Yeni bir koleksiyon oluşturur
Açıklama: where isEqualTo ile verilen değere eşit olan belgeleri filtreler; sıralama veya silme yapmaz.
2 where filtresi ekle
db.collection('messages')
.____('sender', isEqualTo: 'Ali')
.snapshots();
db.collection('messages')
.where('sender', isEqualTo: 'Ali')
.snapshots();
Açıklama: Belgeleri bir alana göre filtrelemek için where metodu kullanılır; alan adı ve koşul parametre olarak verilir.
3 Sorgu parçaları
| Kavram | Anlamı |
|---|---|
where |
Alan ile filtreler |
isEqualTo |
Eşitlik koşulu |
Query |
Sorgu nesnesi |
snapshots |
Akış üretir |