Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

Web'deki Veri Listeleriyle Çalışın

Veritabanı referansı alın

Veritabanından veri okumak veya yazmak için bir firebase.database.Reference örneğine ihtiyacınız vardır.

var database = firebase.database();

Listeleri okumak ve yazmak

Bir veri listesine ekleyin

Ç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, birkaç istemci aynı konuma yazma çakışması olmadan aynı anda alt öğe ekleyebilir. push() tarafından oluşturulan benzersiz anahtar bir zaman damgasına dayanır, bu nedenle liste öğeleri otomatik olarak kronolojik olarak sıralanır.

Çocuğun otomatik olarak oluşturulan anahtarının değerini almak veya alt öğe için verileri ayarlamak için push() yöntemi tarafından döndürülen yeni verilere referansı kullanabilirsiniz. Bir push() başvurusunun .key özelliği, otomatik olarak oluşturulan anahtarı içerir.

Veri yapınızı düzleştirmeyi basitleştirmek için bu otomatik olarak oluşturulan anahtarları kullanabilirsiniz. Daha fazla bilgi için veri yayma örneğine bakın .

Örneğin, push() bir sosyal uygulamadaki bir gönderi listesine yeni bir gönderi eklemek için kullanılabilir:

// Create a new post reference with an auto-generated id
var postListRef = firebase.database().ref('posts');
var newPostRef = postListRef.push();
newPostRef.set({
    // ...
});

Çocuk olaylarını dinleyin

Alt olaylar, push() yöntemi aracılığıyla eklenen yeni bir alt push() veya update() yöntemi aracılığıyla güncellenen bir alt öğe gibi bir işlemden bir düğümün alt öğelerinin başına gelen belirli işlemlere yanıt olarak tetiklenir.

Etkinlik Tipik kullanım
child_added Öğe listelerini alın veya bir öğe listesine yapılan eklemeleri dinleyin. Bu olay, mevcut her çocuk için bir kez ve ardından belirtilen yola her yeni çocuk eklendiğinde tekrar tetiklenir. Dinleyiciye, yeni çocuğun verilerini içeren bir anlık görüntü aktarılır.
child_changed Bir listedeki öğelerde yapılan değişiklikleri dinleyin. Bu olay, bir alt düğüm her değiştirildiğinde tetiklenir. Bu, alt düğümün nesillerindeki tüm değişiklikleri içerir. Olay dinleyicisine aktarılan anlık görüntü, alt öğe için güncellenmiş verileri içerir.
child_removed Listeden kaldırılan öğeleri dinleyin. Bu olay, bir alt öğe kaldırıldığında tetiklenir. Geri arama bloğuna aktarılan anlık görüntü, kaldırılan alt öğenin verilerini içerir.
child_moved Sıralı bir listedeki öğelerin sırasındaki değişiklikleri dinleyin. child_moved olayları her zaman öğenin sırasının değişmesine neden olan child_changed olayını izler (mevcut sipariş yönteminize göre).

Bunların her biri, bir veritabanındaki belirli bir düğümdeki değişiklikleri dinlemek için yararlı olabilir. Örneğin, bir sosyal blog uygulaması, aşağıda gösterildiği gibi bir gönderinin yorumlarındaki etkinliği izlemek için bu yöntemleri birlikte kullanabilir:

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ğerli olayları dinleyin

Alt olayları dinlemek, veri listelerini okumak için önerilen yol olsa da, bir liste referansındaki değer olaylarını dinlemenin yararlı olduğu durumlar vardır.

Bir veri listesine bir value gözlemcisi eklemek, tüm veri listesini tek bir anlık görüntü olarak döndürecektir ve daha sonra, alt öğelere tek tek erişmek için döngüye girebilirsiniz.

Sorgu için yalnızca tek bir eşleşme olduğunda bile, anlık görüntü yine de bir listedir; sadece tek bir öğe içerir. Öğeye erişmek için sonucun üzerinden geçmeniz gerekir:

ref.once('value', (snapshot) => {
  snapshot.forEach((childSnapshot) => {
    var childKey = childSnapshot.key;
    var childData = childSnapshot.val();
    // ...
  });
});

Bu kalıp, alt öğe tarafından eklenen ek olayları dinlemek yerine tek bir işlemde bir listenin tüm alt öğelerini getirmek istediğinizde yararlı olabilir.

Verileri sıralama ve filtreleme

Anahtara, değere veya bir alt öğenin değerine göre sıralanmış verileri almak için Realtime Database Query sınıfını kullanabilirsiniz. Ayrıca, sıralanan sonucu belirli sayıda sonuca veya bir dizi anahtar ya da değere göre filtreleyebilirsiniz.

Verileri sırala

Sıralanmış verileri almak için, sonuçların nasıl sıralanacağını belirlemek için sıralama yöntemlerinden birini belirterek başlayın:

Yöntem Kullanım
orderByChild() Sonuçları, belirtilen bir alt anahtarın veya iç içe geçmiş 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.

Bir seferde yalnızca bir sipariş yöntemi kullanabilirsiniz. Aynı sorguda bir sipariş yönteminin birden çok kez çağrılması bir hata oluşturur.

Aşağıdaki örnek, bir kullanıcının yıldız sayısına göre sıralanmış en çok okunan gönderilerinin bir listesini nasıl alabileceğinizi gösterir:

var myUserId = firebase.auth().currentUser.uid;
var topUserPostsRef = firebase.database().ref('user-posts/' + myUserId).orderByChild('starCount');

Bu, bir alt dinleyici ile birleştirildiğinde, istemciyi, her gönderinin aldığı yıldız sayısına göre sıralanan, kullanıcı kimliklerine göre veritabanındaki kullanıcının gönderileriyle senkronize eden bir sorgu tanımlar. ID'leri dizin anahtarları olarak kullanma tekniğine veri yelpazesi denir, bu konuda Veritabanınızı Yapılandırma bölümünde daha fazla bilgi edinebilirsiniz.

orderByChild() yöntemine yapılan çağrı, sonuçları sıralama orderByChild() sıralamak için alt anahtarı belirtir. Bu durumda gönderiler, ilgili "starCount" alt "starCount" değerine göre "starCount" . Aşağıdaki gibi görünen verileriniz olması durumunda, sorgular iç içe geçmiş çocuklar tarafından da 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 durumda, orderByChild() çağrımızda iç içe geçmiş alt orderByChild() göreli yolunu belirterek orderByChild() metrics anahtarının altında yer alan değerlere göre orderByChild() .

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, bkz. Sorgu verileri nasıl sıralanır .

Verileri filtreleme

Verileri filtrelemek için, bir sorgu oluştururken sınır veya aralık yöntemlerinden herhangi birini sipariş yöntemi ile birleştirebilirsiniz.

Yöntem Kullanım
limitToFirst() Sıralı sonuç listesinin başı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ıraya göre yönteme bağlı olarak, belirtilen anahtara veya değere eşit veya ondan büyük öğeleri döndür.
startAfter() Seçilen sipariş yöntemine bağlı olarak belirtilen anahtardan veya değerden daha büyük öğeleri döndürür.
endAt() Seçilen sıraya göre yönteme bağlı olarak, belirtilen anahtar veya değerden küçük veya ona eşit olan öğeleri döndürür.
endBefore() Seçilen sipariş yöntemine bağlı olarak, belirtilen anahtardan veya değerden daha küçük öğeleri döndürür.
equalTo() Seçilen sıralama yöntemine bağlı olarak, belirtilen anahtara veya değere eşit öğeleri döndür.

Sıralama yöntemlerinden farklı olarak, birden çok sınır 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 olay için senkronize edilecek maksimum çocuk sayısını ayarlamak için limitToFirst() ve limitToLast() yöntemlerini kullanabilirsiniz. Örneğin, limitToFirst() bir sınır ayarlamak için limitToFirst() kullanırsanız, başlangıçta yalnızca en fazla 100 child_added olay alırsınız. child_added veritabanınızda depolanan 100'den az child_added her öğe için bir child_added etkinliği child_added .

Öğeler değiştikçe, sorguya child_removed öğeler için child_removed olayları ve child_removed çıkan öğeler için child_added olayları alırsınız, böylece toplam sayı 100'de kalır.

Aşağıdaki örnek, örnek blog uygulamasının tüm kullanıcılar tarafından en son 100 gönderinin bir listesini almak için bir sorguyu nasıl tanımladığını gösterir:

var recentPostsRef = firebase.database().ref('posts').limitToLast(100);

Bu örnek yalnızca, eklenmiş bir dinleyiciye sahip olması gereken verileri gerçekten senkronize etmek için bir sorguyu tanımlar.

Anahtar veya değere göre filtreleyin

equalTo() için rastgele başlangıç, bitiş ve denklik noktaları seçmek için startAt() , startAfter() , endAt() , endBefore() ve equalTo() kullanabilirsiniz. Bu, verileri sayfalandı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 sıralama yöntemlerinin her birine göre nasıl sıralandığı açıklanmaktadır.

orderByChild

orderByChild() kullanılırken, belirtilen alt anahtarı içeren veriler şu şekilde sıralanır:

  1. Belirtilen alt anahtar için null değeri olan çocuklar önce gelir.
  2. Ardından, belirtilen alt anahtar için false değerine sahip çocuklar gelir. Birden çok alt öğe false değerine sahipse, bunlar sözlükbilimsel olarak anahtara göre sıralanır.
  3. Ardından, belirtilen alt anahtar için true değerine sahip çocuklar gelir. Birden çok alt öğe true değerine sahipse, bunlar sözlükbilimsel olarak anahtara göre sıralanır.
  4. Sırada sayısal değeri olan çocuklar artan sırada sıralanır. Birden çok alt öğe, belirtilen alt düğüm için aynı sayısal değere sahipse, bunlar anahtara göre sıralanır.
  5. Dizeler sayılardan sonra gelir ve sözlükbilimsel olarak artan sırada sıralanır. Birden çok çocuk belirtilen alt düğüm için aynı değere sahipse, bunlar sözlükbilimsel olarak anahtarla sıralanır.
  6. Nesneler en son gelir ve artan sırada anahtara göre sözlükbilimsel olarak sıralanır.

orderByKey

Verilerinizi sıralamak için orderByKey() kullanılırken, veriler anahtara göre artan sırada döndürülür.

  1. 32 bitlik tamsayı olarak ayrıştırılabilen bir anahtara sahip çocuklar önce gelir, artan sırada sıralanır.
  2. Sırada anahtar olarak bir dize değeri olan çocuklar sözlükbilimsel olarak artan sırada sıralanır.

orderByValue

orderByValue() , çocuklar değerlerine göre sıralanır. Sıralama ölçütleri, belirtilen bir alt anahtarın değeri yerine düğümün değerinin kullanılması dışında orderByChild() ile aynıdır.

Dinleyicileri ayır

Geri aramalar, Firebase veritabanı referansınızda off() yöntemi çağrılarak kaldırılır.

Tek bir dinleyiciyi parametre olarak off() öğesine ileterek kaldırabilirsiniz. Konumda bağımsız değişken olmadan off() çağrısı yapmak o konumdaki tüm dinleyicileri kaldırır.

Bir üst dinleyicide off() çağrısı, alt düğümlerinde kayıtlı dinleyicileri otomatik olarak kaldırmaz; Geri aramayı kaldırmak için herhangi bir alt dinleyicide off() da çağrılmalıdır.

Sonraki adımlar