以前の Firebase では、独自のインデックスを生成するか、場所にあるすべてのデータをダウンロードして、子属性 (たとえば、 を持つすべてのユーザーname === "Alex"
) に一致する要素を見つけて取得する必要がありました。
2014 年 10 月、Firebase はorderByChild()
メソッドを介して新しいクエリ機能を展開しました。これにより、このタイプのクエリを迅速かつ効率的に実行できます。以下の更新された回答を参照してください。
Firebase にデータを書き込む場合、さまざまなユース ケースを反映するいくつかの異なるオプションがあります。大まかに言うと、Firebase はツリー構造の NoSQL データ ストアであり、データのリストを管理するためのいくつかの単純なプリミティブを提供します。
一意の既知のキーを使用して Firebase に書き込みます。
ref.child('users').child('123').set({ "first_name": "rob", "age": 28 })
書き込まれた時間で自動的にソートされる自動生成されたキーでリストに追加します。
ref.child('users').push({ "first_name": "rob", "age": 28 })
一意の既知のパスでデータの変更をリッスンします。
ref.child('users').child('123').on('value', function(snapshot) { ... })
リスト内のデータをキーまたは属性値でフィルタリングまたは順序付けします。
// Get the last 10 users, ordered by key
ref.child('users').orderByKey().limitToLast(10).on('child_added', ...)
// Get all users whose age is >= 25
ref.child('users').orderByChild('age').startAt(25).on('child_added', ...)
が追加されたことでorderByChild()
、子アトリビュートに対するクエリ用に独自のインデックスを作成する必要がなくなりました。たとえば、「Alex」という名前のすべてのユーザーを取得するには、次のようにします。
ref.child('users').orderByChild('name').equalTo('Alex').on('child_added', ...)
こちらの Firebase のエンジニア。Firebase にデータを書き込む場合、さまざまなアプリケーションのユースケースを反映するいくつかの異なるオプションがあります。Firebase は NoSQL データ ストアであるため、そのアイテムに直接アクセスできるように一意のキーを使用してデータ オブジェクトを格納するか、特定の場所にあるすべてのデータを読み込んで各アイテムをループ処理し、探しているノードを見つける必要があります。 . 詳細については、データの書き込みとリストの管理を参照してください。
Firebase にデータを書き込むときはset
、一意の定義済みパスを使用してデータを書き込むa/b/c
かpush
(つまりa/b/<unique-id>
. 上に表示されている一意の ID は、 を呼び出しpush
てリストに項目を追加することによって生成されますonline-b-cards/users
。
ここで使用するのではなく、 を使用し、ユーザーの電子メール アドレスなどの一意のキーを使用して各ユーザーのデータを保存するpush
ことをお勧めします。次に、Firebase JS SDK 経由で にset
移動して、ユーザーのデータに直接アクセスできます。online-b-cards/users/<email>
例えば:
function escapeEmailAddress(email) {
if (!email) return false
// Replace '.' (not allowed in a Firebase key) with ',' (not allowed in an email address)
email = email.toLowerCase();
email = email.replace(/\./g, ',');
return email;
}
var usersRef = new Firebase('https://online-b-cards.firebaseio.com/users');
var myUser = usersRef.child(escapeEmailAddress('hello@hello.com'))
myUser.set({ email: 'hello@hello.com', name: 'Alex', phone: 12912912 });
Firebase では参照に特定の文字を使用できないため (「参照の作成」を参照)、上記のコードで を削除.
して a に置き換えます。,