Fixing Firebase Firestore Queries with firestore-db for web and react-native-firebase
Ranjan Singh
Posted on August 19, 2022
Motivation :
I have been working with firestore for almost 4 years now for Web and and Native apps with React Native and also been annoyed by few of the quarks of the firestore because I mainly used Mongodb or SQL.
Channing every single condition with another where function
Like :dbref.where("name","==","John").where(....)
and so on and then orderBy for each one as well as limit.Everytime it returns you have to do
doc.data()
to get the actual data if It's an query then map each item and do.data()
on them.Doing anykind of search is Nightmare doesn't supports full text search but partial search is also annoying.
Solution:
Firestore-db : A utility package for firebase firestore and react-native-firebase to perform firestore queries easily with syntax inspired by mongoose like find,fineOne and also enable limited search options aswell.
Installation
npm install firestore-db
or
yarn add firestore-db
Examples
importing queryBuilder and creating an instance for web or node js
import firebase from 'firebase/app';
import 'firebase/auth';
import 'firebase/firestore';
import { queryBuilder } from 'firestore-db';
const Users = queryBuilder(firebase.firestore().collection("users"));
for react native
import firestore from '@react-native-firebase/firestore';
import { queryBuilder } from 'firestore-db';
const Users = queryBuilder(firebase.firestore().collection("users"));
Queries
find() : find can take an object containing key value pair where query can be string, array or object with operator and value. the param bjects can also take orderBy and limit and returns and array of results no need to call data() functions to get the results.
ex :
Users.find({
firstName:"John",
city :["New York","Los Angeles"],
age : {">=",18},
limit:10,
orderBy:"createdAt",
//or orderBy: ['createdAt', 'asc'] // with acs/desc
//or orderBy: [['userId', 'desc'], ['createdAt', 'asc']] // multiple orderby
})
here are all available functions and request params
Function name | Description | Params | Return |
---|---|---|---|
findOne() |
returns First Matching result | same as find()
|
object Ex: {name:"",age:"",id:""}
|
findById() |
Finds Matching doc with id | id | object Ex: {name:"",age:"",id:""}
|
create() |
Creates New Doc | object Ex: {name:"",age:"",}
|
Resove/Reject |
update() |
Updates Existing Doc | id,updatedObject Ex: "uudefdsds",{name:"",age:""}
|
updatedObject |
deleteOne() |
Delete one Doc with id | id Ex: "uudefdsds"
|
Resove/Reject |
deleteMany() |
Deletes all docs from list of ids | Array Ex: [id1,id2,...]
|
Resove/Reject |
search() |
Simple Text Search with matching Prefix or Whole Text | key and searchterm Ex: "name","Joh"
|
updatedObject |
Thanks for reading try it out once.
Posted on August 19, 2022
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.
Related
August 19, 2022