-
Is a single JSON object
-
Use Firebase SDK (platform-specific) to interface with database:
const db = firebase.database().ref()
-
Get a reference to a node (key):
const ref = db.child("path/to/ref")
-
To retrieve data in real-time, add event listeners like so:
// value events work best for syncing objects objectRef.on("value", snap => {...}) // child events work best for lists listRef.on("child_added", snap => {...}) // Use ref.off to stop listening const handle = ref.on("value", ...) objectRef.off("value", handle)
-
EVENTS
- value
- once
- child_added
- child_removed
- child_changed
- child_moved
-
-
To query data, the syntax is usually
reference().order().query1().query2()...on()
, like so:ref.orderByChild("someKey").equalTo("someValue").limitToFirst(1).on(...)
-
ORDER
- orderByKey() // eg paging
- orderByChild() // eg where clause in SQL
- orderByValue() // eg numeric sorting
-
QUERY
- startAt() // range start
- endAt() // range end, use with startAt for unicode support (see eg below)
- equalTo()
- limitToFirst()
- limitToLast()
- startAfter()
- endBefore()
// Example node // "users": { // "1": { // "name": "abc", // "age": 123 // }, ... // } // Get all "users" that have "name" starting with "X" ref.child("users").orderByChild("name").startAt("X").endAt("X\uf8ff"); // Get all users whose age is less than 100 ref.child("users").orderByChild("age").endAt(99);
-
-
Multipath (ATOMIC) Update
// for updateObject like const updateObject = { "path/to/ref/1/key": "newValue", "path/to/another/ref/key": "newValue", "path/to/one/more/ref/key": "newValue", }; // Update all values (starting from root) at once (or fail together) rootRef.update(updateObject);
-
Security Rules
-
A JSON file separate from DB
{ "rules": { "some/ref": { "$childKey": { ".read": true, ".write": true, ".validate": true } } } }
-
Use server variables to construct rules:
- Auth
- Data
- New Data (inside .write and .validate)
- Now (timestamp)
- Root
- $wildcards
// Users can only see/modify their own data, where their name must be a string { "rules": { "users": { "$uid": { ".read": "auth.uid == $uid", ".write": "auth.uid == $uid" ".validate": "newData.child('name').isString()" } } } }
-
-