Catch up on everthing we announced at this year's Firebase Summit. Learn more

Web'deki Veri Listeleriyle Çalışın

Bir veritabanı referansı alın

Okuma veya yazma verileri veritabanından, sen bir örneğini ihtiyaç için firebase.database.Reference :

Web sürümü 9

import { getDatabase } from "firebase/database";

const database = getDatabase();

Web sürümü 8

var database = firebase.database();

Listeleri okuma ve yazma

Veri listesine ekle

Kullanım push() , çok kullanıcılı uygulamalarda listesi verileri eklemek için bir yöntem. push() metodu benzersiz bir anahtar, yeni bir alt belirtilen Firebase referansına eklenen her oluşturur. Listedeki her yeni öğe için bu otomatik oluşturulan anahtarları kullanarak, birkaç istemci, yazma çakışmaları olmadan aynı anda aynı konuma alt öğeler ekleyebilir. Tarafından oluşturulan benzersiz anahtar push() liste öğeleri otomatik kronolojik olarak sıralanır, böylece bir zaman damgası dayanmaktadır.

Sen tarafından döndürülen yeni verilere başvuru kullanabilirsiniz push() çocuk için, çocuğun otomatik oluşturulan anahtar veya ayar verilerinin değerini elde etmek yöntemle. .key bir özellik push() referans otomatik oluşturulan anahtar içerir.

Veri yapınızı düzleştirmeyi basitleştirmek için bu otomatik oluşturulan anahtarları kullanabilirsiniz. Daha fazla bilgi için, veri çıkış yelpazesi bkz örneği .

Örneğin, push() bir sosyal uygulamasında mesajların bir listeye yeni bir yazı eklemek için kullanılabilir:

Web sürümü 9

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 sürümü 8

// 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

Çocuk olaylar böyle yoluyla eklenen yeni çocuk olarak düzenlenen operasyonda bir düğümün çocukların başına belirli operasyonlara yanıt olarak tetiklenen push() aracılığıyla güncellenmektedir yöntemle veya çocuk update() yöntemiyle.

Etkinlik Tipik kullanım
child_added Öğe listelerini alın veya bir öğe listesine eklemeleri dinleyin. Bu olay, mevcut her alt öğe için bir kez tetiklenir ve ardından belirtilen yola her yeni bir alt öğe eklendiğinde yeniden tetiklenir. Dinleyiciye, yeni çocuğun verilerini içeren bir anlık görüntü iletilir.
child_changed Listedeki öğelerdeki değişiklikleri dinleyin. Bu olay, bir alt düğüm her değiştirildiğinde tetiklenir. Bu, alt düğümün alt öğelerinde yapılan tüm değişiklikleri içerir. Olay dinleyicisine iletilen anlık görüntü, alt öğe için güncellenmiş verileri içerir.
child_removed Listeden kaldırılan öğeleri dinleyin. Bu olay, hemen bir alt öğe kaldırıldığında tetiklenir. Geri arama bloğuna geçirilen anlık görüntü, kaldırılan alt öğenin verilerini içerir.
child_moved Sıralı bir listedeki öğelerin sırasına ilişkin değişiklikleri dinleyin. child_moved olaylar hep izleyin child_changed (mevcut siparişiniz-by yöntemine dayalı) değişime öğenin sırasını neden olay.

Bunların her biri birlikte, bir veritabanındaki belirli bir düğümde yapılan 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:

Web sürümü 9

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 sürümü 8

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 olaylarını dinleyin

Alt olayları dinlemek, veri listelerini okumanın önerilen yolu olsa da, bir liste referansındaki değer olaylarını dinlemenin yararlı olduğu durumlar vardır.

Bir ekleme value verilerin bir listeye gözlemci tek anlık yapabilirsiniz sonra döngü üzerinde erişim bireysel çocuklar gibi veriler tüm listesini döndürecektir.

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

Web sürümü 9

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 sürümü 8

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

Bu model, ek alt eklenen olayları dinlemek yerine, bir listenin tüm alt öğelerini tek bir işlemde almak istediğinizde yararlı olabilir.

Verileri sıralama ve filtreleme

Sen Gerçek Zamanlı Veri Tabanı kullanabilirsiniz Query değeri ile, anahtar ile sıralanmış verileri almak için sınıf veya bir çocuğun değeri ile. Ayrıca, sıralanan sonucu belirli sayıda sonuca veya bir dizi anahtar veya değere göre filtreleyebilirsiniz.

Verileri sırala

Sıralanmış verileri almak için, sonuçların nasıl sıralandığı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.

Yalnızca bir seferde yöntemle sırasını-birini kullanabilirsiniz. Aynı sorguda bir sipariş yönteminin birden çok kez çağrılması bir hata verir.

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

Web sürümü 9

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 sürümü 8

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

Bu ile birleştirilmesi durumunda bir sorgu tanımlayan çocuk dinleyici kendi kullanıcı kimliğine dayalı veritabanında yolundan Kullanıcı mesajlarının ile müşteri eşitler, her yazılan aldı yıldızlı sayısına göre sıralanır. İndeks anahtarları olarak kimliklerini kullanarak Bu teknik daha bu konuda bilgi edinebilir, veri fanı out denir Yapı Kişisel Veritabanı .

Çağrı orderByChild() metodu ile sonuçlarını sipariş çocuk anahtarını belirtir. Bu durumda, mesaj kendi değerine göre sıralanır "starCount" çocuk. Şuna benzeyen verileriniz varsa, sorgular iç içe geçmiş çocuklar tarafından da sipariş edilebilir:

"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, biz altında iç içe değerlere göre bizim liste elemanlarını sipariş edebilirsiniz metrics bizim iç içe geçmiş çocuğa göreli yolu belirterek tuşunun orderByChild() çağrısı.

Web sürümü 9

import { getDatabase, ref, query, orderByChild } from "firebase/database";

const db = getDatabase();
const mostViewedPosts = query(ref(db, 'posts'), orderByChild('metrics/views'));

Web sürümü 8

var mostViewedPosts = firebase.database().ref('posts').orderByChild('metrics/views');

Diğer veri türleri sıralanır konusunda daha fazla bilgi için bkz sorgu veri sipariş nasıl .

Verileri filtreleme

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

Yöntem kullanım
limitToFirst() Sıralı sonuç listesinin başından 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ğere eşit veya daha büyük öğeleri döndürün.
startAfter() Seçilen sıralama yöntemine bağlı olarak belirtilen anahtar veya değerden daha büyük öğeleri döndürün.
endAt() Seçilen sıralama yöntemine bağlı olarak, belirtilen anahtar veya değere eşit veya daha küçük öğeleri döndürün.
endBefore() Seçilen sıralama yöntemine bağlı olarak, belirtilen anahtar veya değerden daha az öğeleri döndürün.
equalTo() Seçilen sıralama yöntemine bağlı olarak, belirtilen anahtara veya değere eşit öğeleri döndürün.

Sıralama yöntemlerinden farklı olarak, birden fazla limit veya aralık fonksiyonunu birleştirebilirsiniz. Örneğin, birleştirebilirsiniz startAt() ve endAt() değerlerinin belirli bir aralıkla sonuçlarını sınırlandırmak için yöntemler.

Sonuç sayısını sınırlayın

Sen kullanabilirsiniz limitToFirst() ve limitToLast() belirli bir etkinlik için senkronize edilmesini çocukların maksimum sayısını ayarlamak için yöntemler. Örneğin, kullanmak durumunda limitToFirst() 100 sınırlamak için kullanın, başlangıçta sadece 100 kadar almak child_added olaylar. Eğer Firebase veritabanı, bir saklanan 100'den az öğeler varsa child_added her öğe için olay yangınlar.

Ürün değiştirmek gibi, elde child_added sorgu ve girmek öğeler için olayları child_removed 100'de yüzden o toplam sayısı kalır terk öğeler için olayları.

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

Web sürümü 9

import { getDatabase, ref, query, limitToLast } from "firebase/database";

const db = getDatabase();
const recentPostsRef = query(ref(db, 'posts'), limitToLast(100));

Web sürümü 8

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

Bu örnek, sadece, aslında, bağlı olması gerekir verilerini senkronize etmek için, bir sorgu tanımlar dinleyici .

Anahtar veya değere göre filtrele

Sen kullanabilirsiniz startAt() , startAfter() , endAt() , endBefore() ve equalTo() sorguları için keyfi biten başlangıç, ve denklik noktalarını seçin. Bu, verileri sayfalamak 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üm Veri amacıyla-by yöntemlerin her göre sıralanır açıklar Query sınıfı.

orderByChild

Kullanırken orderByChild() , aşağıdaki gibi belirtilen çocuk anahtar sıralanır içerdiği verileri:

  1. Bir olan çocuklar null belirtilen çocuk anahtarı için değer önce gelir.
  2. Değeriyle Çocuklar false belirtilen çocuk anahtarı için bir sonraki gelir. Birden çocuklar değeri varsa false , bunlar sıralanır sözlük sırasında anahtar ile.
  3. Değerinde olan çocuklar true belirtilen çocuk anahtarı için bir sonraki gelir. Birden çocukların bir değeri varsa true , bunlar anahtar ile leksikografik sıralanır.
  4. Sayısal değeri olan çocuklar, artan düzende 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 düzende sıralanır. Birden çok alt öğe, belirtilen alt düğüm için aynı değere sahipse, anahtara göre sözlükbilimsel olarak sıralanır.
  6. Nesneler en son gelir ve anahtara göre artan düzende sözlükbilimsel olarak sıralanır.

orderByKey

Kullanırken orderByKey() veri sıralamak için, veri anahtar ile artan düzende döndürülür.

  1. 32-bit tamsayı olarak ayrıştırılabilen bir anahtarı olan çocuklar, artan düzende sıralanarak önce gelir.
  2. Anahtar olarak dize değerine sahip çocuklar, sözlükbilimsel olarak artan düzende sıralanır.

orderByValue

Kullanırken orderByValue() , çocukların değerinden göre sıralanır. Sipariş kriterleri ile aynıdır orderByChild() düğümünün değeri yerine belirli bir çocuk anahtarının değeri kullanılır hariç.

Dinleyicileri ayır

Callbacks arayarak kaldırılır off() sizin Firebase veritabanı Referanstaki yöntemi.

Sen bir parametre olarak ileterek tek dinleyici kaldırabilir off() . Arayan off() argüman olmadan yere bu konumdaki tüm dinleyicileri kaldırır.

Arayan off() otomatik olarak alt düğümler üzerinde kayıtlı dinleyicileri kaldırmaz bir ebeveyn dinleyici üzerinde; off() ayrıca geri arama kaldırmak için herhangi bir çocuk işleyicilerinizde çağrılmalıdır.

Sonraki adımlar