Veritabanı referansı alma
Veritabanından veri okumak veya yazmak için firebase.database.Reference
örneğinin olması gerekir:
Web
import { getDatabase } from "firebase/database"; const database = getDatabase();
Web
var database = firebase.database();
Okuma ve yazma listeleri
Veri listesine ekle
Çok kullanıcılı uygulamalarda bir listeye veri eklemek için push()
yöntemini kullanın.
push()
yöntemi, belirtilen Firebase referansına her yeni alt öğe eklendiğinde benzersiz bir anahtar oluşturur. Listedeki her yeni öğe için otomatik olarak oluşturulan bu anahtarları kullanarak, bazı istemciler yazma çakışmaları olmadan aynı anda aynı konuma alt öğeler ekleyebilir. push()
tarafından oluşturulan benzersiz anahtar bir zaman damgasına dayanır. Böylece liste öğeleri otomatik olarak kronolojik olarak sıralanır.
Alt yayıncının otomatik olarak oluşturulan anahtarın değerini öğrenmek veya alt öğe için verileri ayarlamak üzere push()
yöntemi tarafından döndürülen yeni verilere referansı kullanabilirsiniz. Bir push()
referansının .key
özelliği, otomatik olarak oluşturulan anahtarı içerir.
Veri yapınızı düzeltmeyi basitleştirmek için otomatik olarak oluşturulan bu anahtarları kullanabilirsiniz. Daha fazla bilgi için veri yayma örneğine bakın.
Örneğin push()
, bir sosyal uygulamadaki yayın listesine yeni bir yayın eklemek için kullanılabilir:
Web
import { getDatabase, ref, push, set } from "firebase/database"; // Create a new post reference with an auto-generated id const db = getDatabase(); const postListRef = ref(db, 'posts'); const newPostRef = push(postListRef); set(newPostRef, { // ... });
Web
// Create a new post reference with an auto-generated id var postListRef = firebase.database().ref('posts'); var newPostRef = postListRef.push(); newPostRef.set({ // ... });
Çocuk etkinliklerini dinle
Alt etkinlikler, push()
yöntemiyle eklenen yeni bir alt öğe veya update()
yöntemiyle güncellenen bir alt öğe gibi bir işlemdeki düğümün alt öğelerine yapılan belirli işlemlere yanıt olarak tetiklenir.
Etkinlik | Tipik kullanım |
---|---|
child_added |
Öğe listelerini alın veya öğe listesine yapılan eklemeleri dinleyin. Bu etkinlik, mevcut her alt öğe için bir kez ve belirtilen yola her yeni alt öğe eklendiğinde tekrar tetiklenir. İşleyiciye, yeni alt öğenin verilerini içeren bir anlık görüntü iletilir. |
child_changed |
Listedeki öğelerde yapılan değişiklikleri bekleyin. Bu etkinlik, bir alt düğüm her değiştirildiğinde tetiklenir. Buna alt düğümün alt öğelerinde yapılan değişiklikler de dahildir. Etkinlik işleyiciye iletilen anlık görüntü, alt öğeye ait güncellenmiş verileri içerir. |
child_removed |
Bir listeden kaldırılan öğeleri bekleyin. Bu etkinlik, hemen bir alt öğe kaldırıldığında tetiklenir.Geri çağırma blokuna iletilen anlık görüntü, kaldırılan alt öğeye ait verileri içerir. |
child_moved |
Sıralı listedeki öğelerin sırasındaki değişiklikleri bekleyin.
child_moved etkinlikleri her zaman öğenin sırasının değişmesine neden olan child_changed etkinliğini takip eder (geçerli sıralama yönteminize göre).
|
Bunların her biri, veritabanındaki belirli bir düğümde yapılan değişiklikleri dinlemek için faydalı olabilir. Örneğin, bir sosyal blog uygulaması bir yayının yorumlarındaki etkinliği izlemek için aşağıda gösterildiği gibi bu yöntemleri birlikte kullanabilir:
Web
import { getDatabase, ref, onChildAdded, onChildChanged, onChildRemoved } from "firebase/database"; const db = getDatabase(); const commentsRef = ref(db, 'post-comments/' + postId); onChildAdded(commentsRef, (data) => { addCommentElement(postElement, data.key, data.val().text, data.val().author); }); onChildChanged(commentsRef, (data) => { setCommentValues(postElement, data.key, data.val().text, data.val().author); }); onChildRemoved(commentsRef, (data) => { deleteComment(postElement, data.key); });
Web
var commentsRef = firebase.database().ref('post-comments/' + postId); commentsRef.on('child_added', (data) => { addCommentElement(postElement, data.key, data.val().text, data.val().author); }); commentsRef.on('child_changed', (data) => { setCommentValues(postElement, data.key, data.val().text, data.val().author); }); commentsRef.on('child_removed', (data) => { deleteComment(postElement, data.key); });
Değer etkinliklerine göz atın
Veri listelerini okumak için alt etkinlikleri dinlemek önerilen yöntemdir ancak bir liste referansındaki değer etkinliklerini dinlemenin kullanışlı olduğu durumlar da vardır.
Bir veri listesine value
gözlemleyicisi eklemek, veri listesinin tamamını tek bir anlık görüntü olarak döndürür ve daha sonra alt öğelere erişmek için geçiş yapabilirsiniz.
Sorgu için tek bir eşleşme olsa bile anlık görüntü yine de bir liste olarak kalır ve yalnızca tek bir öğe içerir. Öğeye erişmek için sonucun üstünden geçmeniz gerekir.
Web
import { getDatabase, ref, onValue } from "firebase/database"; const db = getDatabase(); const dbRef = ref(db, '/a/b/c'); onValue(dbRef, (snapshot) => { snapshot.forEach((childSnapshot) => { const childKey = childSnapshot.key; const childData = childSnapshot.val(); // ... }); }, { onlyOnce: true });
Web
ref.once('value', (snapshot) => { snapshot.forEach((childSnapshot) => { var childKey = childSnapshot.key; var childData = childSnapshot.val(); // ... }); });
Bu kalıp, başka alt etkinlikleri dinlemek yerine bir listenin tüm alt öğelerini tek bir işlemde getirmek istediğinizde kullanışlı olabilir.
Verileri sıralama ve filtreleme
Verileri anahtara, değere veya bir alt öğenin değerine göre sıralanmış şekilde almak için Realtime Database Query
sınıfını kullanabilirsiniz. Sıralanan sonucu belirli sayıda sonuç veya anahtar ya da değer aralığına göre de filtreleyebilirsiniz.
Verileri sırala
Sıralanmış verileri almak için öncelikle sonuçların nasıl sıralandığını belirlemek üzere sıralama yöntemlerinden birini belirtin:
Yöntem | Kullanım |
---|---|
orderByChild() |
Sonuçları, belirtilen bir alt anahtarın veya iç içe yerleştirilmiş alt yolun değerine göre sıralayın. |
orderByKey()
| Sonuçları alt anahtarlara göre sıralayın. |
orderByValue() |
Sonuçları alt değerlere göre sıralayın. |
Aynı anda yalnızca bir sıralama yöntemi kullanabilirsiniz. Bir sıralama yönteminin aynı sorguda birden çok kez çağrılması hataya neden olur.
Aşağıdaki örnek, bir kullanıcının yıldız sayısına göre sıralanmış en popüler yayınlarının listesini nasıl alabileceğinizi gösterir:
Web
import { getDatabase, ref, query, orderByChild } from "firebase/database"; import { getAuth } from "firebase/auth"; const db = getDatabase(); const auth = getAuth(); const myUserId = auth.currentUser.uid; const topUserPostsRef = query(ref(db, 'user-posts/' + myUserId), orderByChild('starCount'));
Web
var myUserId = firebase.auth().currentUser.uid; var topUserPostsRef = firebase.database().ref('user-posts/' + myUserId).orderByChild('starCount');
Bu, bir alt işleyici ile birleştirildiğinde, istemcinin kullanıcı kimliğine göre veritabanındaki yoldan kullanıcının yayınları ile senkronize edilmesini sağlayan bir sorgu tanımlar. Kullanıcı kimlikleri, her bir yayının aldığı yıldız sayısına göre sıralanır. Kimlikleri dizin anahtarı olarak kullanma tekniği "veri yayma" olarak adlandırılır. Bu teknik hakkında daha fazla bilgiyi Veritabanınızı Yapılandırma bölümünde bulabilirsiniz.
orderByChild()
yöntemine yapılan çağrı, sonuçların sıralanacağı alt anahtarı belirtir. Bu durumda yayınlar ilgili "starCount"
alt öğesinin değerine göre sıralanır. Sorgular, aşağıdaki gibi görünen verileriniz olması durumunda iç içe yerleştirilmiş alt öğelere göre de sıralanabilir:
"posts": { "ts-functions": { "metrics": { "views" : 1200000, "likes" : 251000, "shares": 1200, }, "title" : "Why you should use TypeScript for writing Cloud Functions", "author": "Doug", }, "android-arch-3": { "metrics": { "views" : 900000, "likes" : 117000, "shares": 144, }, "title" : "Using Android Architecture Components with Firebase Realtime Database (Part 3)", "author": "Doug", } },
Bu örnekte, orderByChild()
çağrımızda iç içe yerleştirilmiş alt öğenin göreli yolunu belirterek liste öğelerimizi metrics
anahtarı altında iç içe yerleştirilmiş değerlere göre sıralayabiliriz.
Web
import { getDatabase, ref, query, orderByChild } from "firebase/database"; const db = getDatabase(); const mostViewedPosts = query(ref(db, 'posts'), orderByChild('metrics/views'));
Web
var mostViewedPosts = firebase.database().ref('posts').orderByChild('metrics/views');
Diğer veri türlerinin nasıl sıralandığı hakkında daha fazla bilgi için Sorgu verileri nasıl sıralanır? bölümüne bakın.
Veri filtreleme
Verileri filtrelemek için bir sorgu oluştururken sınır veya aralık yöntemlerinden herhangi birini tek bir sıralama yöntemiyle birleştirebilirsiniz.
Yöntem | Kullanım |
---|---|
limitToFirst() |
Sıralı sonuç listesinin başlangıcından itibaren döndürülecek maksimum öğe sayısını ayarlar. |
limitToLast() |
Sıralı sonuç listesinin sonundan döndürülecek maksimum öğe sayısını ayarlar. |
startAt() |
Seçilen sıralama yöntemine bağlı olarak, belirtilen anahtar veya değerden büyük veya ona eşit olan öğeleri döndürün. |
startAfter() |
Seçilen yönteme göre belirlenen anahtar veya değerden daha yüksek olan öğeleri döndürür. |
endAt() |
Seçilen sıralama yöntemine bağlı olarak, belirtilen anahtar veya değerden düşük veya ona eşit olan öğeleri döndürün. |
endBefore() |
Seçilen yönteme göre belirlenen anahtar veya değerden daha düşük olan öğeleri döndürür. |
equalTo() |
Seçilen sıralama yöntemine bağlı olarak, belirtilen anahtar veya değere eşit öğeleri döndürür. |
Sıralama ölçütü yöntemlerinden farklı olarak birden çok sınırlama veya aralık işlevini birleştirebilirsiniz.
Örneğin, sonuçları belirli bir değer aralığıyla sınırlamak için startAt()
ve endAt()
yöntemlerini birleştirebilirsiniz.
Sonuç sayısını sınırlandırın
Belirli bir etkinlik için senkronize edilecek maksimum alt öğe sayısını ayarlamak için limitToFirst()
ve limitToLast()
yöntemlerini kullanabilirsiniz. Örneğin, limitToFirst()
kullanarak sınır 100 olarak belirlerseniz başlangıçta en fazla 100 child_added
etkinliği alırsınız. Firebase veritabanınızda depolanan öğe sayısı 100'den azsa her öğe için bir child_added
etkinliği tetiklenir.
Öğeler değiştikçe sorguya giren öğeler için child_added
etkinlik, sorgudan çıkan öğeler için de child_removed
etkinlik alırsınız. Böylece toplam sayı 100'de kalır.
Aşağıdaki örnekte, örnek blogging uygulamasının tüm kullanıcılar tarafından yapılan en son 100 yayının listesini almak için bir sorguyu nasıl tanımladığı gösterilmektedir:
Web
import { getDatabase, ref, query, limitToLast } from "firebase/database"; const db = getDatabase(); const recentPostsRef = query(ref(db, 'posts'), limitToLast(100));
Web
var recentPostsRef = firebase.database().ref('posts').limitToLast(100);
Bu örnek yalnızca bir sorguyu tanımlar; verilerin senkronize edilebilmesi için ekli bir işleyici içermesi gerekir.
Anahtar veya değere göre filtreleyin
Sorgular için rastgele başlangıç, bitiş ve denklik noktalarını seçmek amacıyla startAt()
, startAfter()
,endAt()
, endBefore()
ve equalTo()
kullanabilirsiniz. Bu, verileri sayfalara ayırmak veya belirli bir değere sahip alt öğeleri olan öğeleri bulmak için yararlı olabilir.
Sorgu verileri nasıl sıralanır?
Bu bölümde, verilerin Query
sınıfındaki her bir yönteme göre nasıl sıralandığı açıklanmaktadır.
orderByChild
orderByChild()
kullanılırken belirtilen alt anahtarı içeren veriler aşağıdaki gibi sıralanır:
- Belirtilen alt anahtarda
null
değerine sahip olan alt öğeler önce gelir. - Belirtilen alt anahtar için
false
değerine sahip olan alt öğeler ardından gelir. Birden fazla alt öğefalse
değerine sahipse bunlar anahtara göre sözlüksel olarak sıralanır. - Belirtilen alt anahtar için
true
değerine sahip olan alt öğeler ardından gelir. Birden fazla alt öğetrue
değerine sahipse bunlar sözlüksel olarak anahtara göre sıralanır. - Sayısal değere sahip olan alt öğeler artan düzende sıralanır. Belirtilen alt düğüm için aynı sayısal değere sahip birden fazla alt öğe varsa bunlar anahtara göre sıralanır.
- Dizeler sayılardan sonra gelir ve sözlüksel olarak artan düzende sıralanır. Birden fazla alt düğüm, belirtilen alt düğüm için aynı değere sahipse bunlar sözlüksel olarak anahtara göre sıralanır.
- Nesneler son sırada gelir ve anahtara göre sözlüksel olarak artan düzende sıralanır.
orderByKey
Verilerinizi sıralamak için orderByKey()
kullandığınızda veriler, anahtara göre artan düzende döndürülür.
- 32 bit tam sayı olarak ayrıştırılabilen bir anahtarı olan alt öğeler önce gelir ve artan düzende sıralanır.
- Anahtarlarında dize değeri olan alt öğeler sıradaki sırayla, sözlüksel olarak artan düzende sıralanır.
orderByValue
orderByValue()
kullanılırken alt öğeler değerlerine göre sıralanır. Sıralama ölçütleri orderByChild()
ile aynıdır. Tek fark, belirtilen alt anahtarın değeri yerine düğümün değerinin kullanılmasıdır.
Dinleyicileri ayır
Geri çağırma işlevleri, Firebase veritabanı referansınızda off()
yöntemi çağrılarak kaldırılır.
Tek bir işleyiciyi off()
öğesine parametre olarak ileterek kaldırabilirsiniz.
off()
uygulamasının konumda bağımsız değişken olmadan çağrılması, söz konusu konumdaki tüm dinleyicileri kaldırır.
Bir üst işleyicide off()
çağrısı yapıldığında, alt düğümlerde kayıtlı işleyiciler otomatik olarak kaldırılmaz. Geri çağırmanın kaldırılması için tüm alt işleyicilerde de off()
çağrılmalıdır.