/Querybase

Bringing the where statement to the Firebase Database.

Primary LanguageTypeScriptApache License 2.0Apache-2.0

Bringing the .where() statement to the Firebase Database

Build Status Coverage Status

Querybase is in an experiment and not for production apps/sites/anything.

Cloud Firestore makes this library irrelevant as it has much more complex querying.

What is Querybase?

  • .where() - Find records by up to three fields.
  • No client-side filtering - Querybase genererates composite keys to provide querying on multiple fields.
  • Simple Query API - Use common query methods such as .greaterThan(), .lessThan(), and .startsWith().
  • Lightweight - 1.87 kB (gzipped)

Install

npm install querybase --save

Use via unpkg

<script src="https://unpkg.com/querybase@0.6.0"></script>

Example usage

Querybase takes a Firebase Database reference with a list of fields to create composite keys. You can only use up to three fields. Any more would create a crazy amount of composite keys in the database.

Querying using multiple fields

 const databaseRef = firebase.database().ref().child('people');
 const querybaseRef = querybase.ref(databaseRef, ['name', 'age', 'location']);
 
 // Automatically handles composite keys
 querybaseRef.push({ 
   name: 'David',
   age: 27,
   location: 'SF'
 });
 
// Find records by multiple fields
// returns a Firebase Database ref
const queriedDbRef = querybaseRef
  .where({
    name: 'David',
    age: 27
  });
  
 // Listen for realtime updates
 queriedDbRef.on('value', snap => console.log(snap));

Querying using one field

Querybase also provides rich querying methods for single fields.

const databaseRef = firebase.database.ref().child('people');
const querybaseRef = querybase.ref(databaseRef, []);
// Querybase for single criteria, returns a Firebase Ref
querybaseRef.where({ name: 'David'});
 
// Querybase for a single string criteria, returns
// a QuerybaseQuery, which returns a Firebase Ref
querybaseRef.where('name').startsWith('Da');
querybaseRef.where('age').lessThan(30);
querybaseRef.where('age').greaterThan(20);
querybaseRef.where('age').between(20, 30);