Web'deki Veri Listeleri ile Çalışma

Veritabanı referansı alma

Veritabanından veri okumak veya yazmak için firebase.database.Reference:

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ı. Her biri için otomatik olarak oluşturulan bu anahtarları yeni bir öğe içeriyorsa, bazı istemciler aynı konuma alt öğeler ekleyebilir hem de yazma çakışmaları olmadan aynı anda. push() tarafından oluşturulan benzersiz anahtar bir zaman damgasına dayalı olduğundan liste öğeleri otomatik olarak sıralanır kronolojik olarak takip edin.

Aşağıdakileri almak için push() yönteminin döndürdüğü yeni verilere referansı kullanabilirsiniz. alt yayıncının otomatik olarak oluşturduğu anahtarın değerini veya çocuk için veri ayarlayın. İlgili içeriği oluşturmak için kullanılan Bir push() referansının .key özelliği otomatik olarak oluşturulan anahtarı içeriyor.

Verilerinizi birleştirmeyi kolaylaştırmak için otomatik olarak oluşturulan bu anahtarları kullanabilirsiniz inceleyeceğiz. Daha fazla bilgi için veri yayma işlemini inceleyin example) arayın.

Örneğin, bir yayın listesine yeni bir yayın eklemek için push() kullanılabilir sosyal medya uygulamasında:

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, Bir işlemdeki düğümün alt öğeleridir. Örneğin, push() yöntemi veya update() yöntemiyle güncellenen bir alt öğe.

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, ardından tekrar tetiklenir. belirtilen yola her yeni alt öğe eklendiğinde. Dinleyici yeni alt yayıncının verilerini içeren bir anlık görüntü iletildi.
child_changed Listedeki öğelerde yapılan değişiklikleri bekleyin. Bu etkinlik, bir alt düğüm her değiştirildiğinde tetiklenir. Buna şunlar dâhildir: alt düğümün alt öğelerinde yapılan değişikliklerdir. Anlık görüntü başarılı alt öğeye ait güncellenmiş verileri içermesini sağlar.
child_removed Bir listeden kaldırılan öğeleri bekleyin. Bu etkinlik şu durumda tetiklenir: hemen bir alt öğe kaldırılır.Geri çağırma bloğuna geçirilen anlık görüntü Kaldırılan alt yayıncının verilerini içerir.
child_moved Sıralı listedeki öğelerin sırasındaki değişiklikleri bekleyin. child_moved etkinlik her zaman şunları takip eder: Öğenin siparişinin verilmesine neden olan child_changed etkinlik (geçerli sıralama yönteminize göre).

Bunların her biri birlikte belirli bir modeldeki değişiklikleri dinlemek için düğümünü anlatacağım. Örneğin, bir sosyal blog uygulaması bu yöntemleri kullanabilir aşağıdaki gibi bir gönderinin yorumlarındaki etkinliği izlemek için aşağıdaki adımları uygulayın:

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 önerilen yöntem alt etkinlikleri dinlemek olsa da bir liste referansındaki değer etkinliklerini dinlemenin kullanışlı olduğu durumlar vardır.

Veri listesine bir value gözlemleyicisi eklendiğinde tek bir anlık görüntü olarak tüm veri listesini devre dışı bırakabilirsiniz. çocuklara bireysel olarak erişebilir.

Sorgu için tek bir eşleşme olsa bile anlık görüntü yine de listele: tek bir öğe içeriyor. Öğeye erişmek için döngü oluşturmanız gerekir şu sonucun üzerinde:

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, bir listenin tüm alt öğelerini getirmek istediğinizde yararlı olabilir ek alt öğeleri dinlemek yerine tek bir işlemle etkinlikler.

Verileri sıralama ve filtreleme

Verileri sıralama ölçütü olarak almak için Realtime Database Query sınıfını kullanabilirsiniz değerine veya bir alt öğe değerine göre düzenleyebilirsiniz. Mevcut içeriklerinize göre sıralanmış sonucu belirli sayıda sonuç veya anahtar aralığı ya da değerler.

Verileri sırala

Sıralanmış verileri almak için öncelikle sıralamaya göre yöntemlerden birini belirterek sonuçların nasıl sıralandığını belirler:

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. Tek tek sıralama yöntemini çağırma işlemi birden çok kez tekrarlanırsa hata verir.

Aşağıdaki örnek, bir kullanıcının en popüler yayınlar yıldız sayısına göre sıralandı:

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 sorguyu tanımlar istemciyi, veritabanındaki yoldan kullanıcının yayınlarıyla senkronize eder kullanıcı kimliklerine göre, her 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. daha fazla bilgiye ulaşabilirsiniz. Veritabanınızı Yapılandırma.

orderByChild() yöntemine yapılan çağrı, arama sonuçlarını görebilirsiniz. Bu örnekte yayınlar, postalarının değerine göre, ilgili "starCount" alt öğesi. Sorgular, iç içe yerleştirilmiş ya da çocuklarınız (örneğin, aşağıdaki gibi görünen verileriniz varsa):

"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, liste öğelerimizi metrics anahtarı için, iç içe yerleştirilmiş alt öğenin göreli yolunu orderByChild() sesli arama.

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 sınır veya aralık yöntemlerinden herhangi birini, yönteme göre sırala.

Yöntem Kullanım
limitToFirst() Döndürülecek maksimum öğe sayısını sıralı sonuç listesi.
limitToLast() Siparişin sonundan itibaren iade edilecek maksimum öğe sayısını ayarlar sonuç listesi.
startAt() Belirtilen anahtar veya değerden büyük veya ona eşit olan öğeleri döndürün, seçilen yönteme göre değişir.
startAfter() Belirtilen anahtar veya değerden büyük öğeleri döndür seçilen yönteme göre değişir.
endAt() Belirtilen anahtar veya değerden düşük ya da ona eşit olan öğeleri döndür, seçilen yönteme göre değişir.
endBefore() Belirtilen anahtar veya değerden daha düşük olan öğeleri döndür seçilen yönteme göre değişir.
equalTo() Şuna bağlı olarak, belirtilen anahtar veya değere eşit olan öğeleri döndürün: seçilen yönteme göre değişir.

Sıralama ölçütü yöntemlerinden farklı olarak birden çok sınırlama veya aralık işlevini birleştirebilirsiniz. Örneğin, kullanıcı sayısını sınırlandırmak için startAt() ve endAt() yöntemlerini birleştirebilirsiniz. sonuçları belirli bir değer aralığına göre ayarlar.

Sonuç sayısını sınırlandırın

Şu değeri ayarlamak için limitToFirst() ve limitToLast() yöntemlerini kullanabilirsiniz: belirli bir etkinlik için senkronize edilecek maksimum alt öğe sayısı. Örneğin, 100'lük bir sınır belirlemek için limitToFirst() kullanıyorsanız başlangıçta yalnızca 100 child_added etkinliğine kadar. Hesabınızda depoladığınız öğe sayısı 100'den azsa Firebase veritabanını kullanıyorsanız her öğe için bir child_added etkinliği tetiklenir.

Öğeler değiştikçechild_added sorgu ve child_removed etkinliklerini görebilirsiniz. Böylece, toplam sayı 100'de kalıyor.

Aşağıdaki örnekte, örnek blog uygulamasının bir sorguyu tüm kullanıcılar tarafından paylaşılan en son 100 yayının listesini al:

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 ve yalnızca Ekte bir dinleyici bulunmalıdır.

Anahtar veya değere göre filtreleyin

startAt(), startAfter(), endAt(), endBefore() ve equalTo() için rastgele başlangıç, bitiş ve denklik noktaları seçin daha fazla bilgi edineceksiniz. Bu, verileri sayfalara ayırmak veya çocukların bulunduğu öğeleri bulmak için yararlı olabilir reklam grubudur.

Sorgu verileri nasıl sıralanır?

Bu bölümde, verilerin her bir yönteme göre nasıl sıralandığı açıklanmaktadır. Query sınıf.

orderByChild

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

  1. Belirtilen alt anahtar için null değerine sahip alt öğeler gelir tıklayın.
  2. Belirtilen alt anahtar için false değerine sahip alt öğeler bir sonraki adımımız var. Birden fazla çocuk false değerine sahipse anahtara göre sözlüksel olarak sıralanır.
  3. Belirtilen alt anahtar için true değerine sahip alt öğeler bir sonraki adımımız var. Birden fazla çocuk true değerine sahipse anahtar kelimelere göre sıralanması.
  4. Sayısal değere sahip olan alt öğeler artan düzende sıralanır. Eğer birden fazla alt öğe, belirtilen alt öğe için aynı sayısal değere sahip anahtara göre sıralanırlar.
  5. Dizeler sayılardan sonra gelir ve sözlüksel olarak artan düzende sıralanır. sipariş. Belirtilen alt öğe için aynı değere sahip birden fazla alt öğe varsa bu terimler sözlüksel olarak anahtara göre sıralanır.
  6. 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 artan düzende döndürülür anahtara göre.

  1. 32 bit tam sayı olarak ayrıştırılabilen bir anahtarı olan alt öğeler önce gelir ve artan düzende sıralanır.
  2. 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, düğümün değerinin belirtilen bir alt anahtarın değeri yerine kullanılır.

Dinleyicileri ayır

Geri çağırma işlevleri,off() Firebase veritabanı referansı.

Tek bir işleyiciyi off() öğesine parametre olarak ileterek kaldırabilirsiniz. Konumda bağımsız değişken olmadan off() çağrısı yapıldığında, söz konusu konumdaki tüm dinleyiciler kaldırılır konum.

Ebeveyn dinleyicide off() adlı kullanıcıya yapılan çağrı şunu yapmaz: alt düğümlerine kayıtlı işleyicileri otomatik olarak kaldırmalıdır; off(), tüm çocuk dinleyicilerde de çağrılmalıdır tuşuna basarak geri çağırmayı kaldırın.

Sonraki adımlar