Мотивация
Я работаю с firestore уже почти 4 года для веб-приложений и нативных приложений с React Native, и меня раздражали некоторые кворки firestore, потому что я в основном использовал Mongodb или SQL.
-
Замена каждого условия еще одной функцией where.
Напримерdbref.where("name","==", "John").where(....)
и так далее, а затем orderBy для каждого из них, а также limit. -
Каждый раз, когда он возвращается, вы должны сделать
doc.data()
, чтобы получить фактические данные, если это запрос, то отобразить каждый элемент и сделать.data()
на них. -
Выполнение любого вида поиска — это кошмар, поскольку не поддерживается полнотекстовый поиск, а частичный поиск также раздражает.
Решение:
Firestore-db : пакет утилит для firebase firestore и react-native-firebase, позволяющий легко выполнять запросы к firestore с синтаксисом, вдохновленным mongoose, например find, fineOne, а также включать ограниченные варианты поиска.
Установка
npm install firestore-db
или
Примеры
импортирование queryBuilder и создание экземпляра для web или 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"));
для react native
import firestore from '@react-native-firebase/firestore';
import { queryBuilder } from 'firestore-db';
const Users = queryBuilder(firebase.firestore().collection("users"));
Запросы
find() : find может принимать объект, содержащий пару ключ-значение, где запрос может быть строкой, массивом или объектом с оператором и значением. param bjects может также принимать orderBy и limit и возвращает массив результатов, нет необходимости вызывать функции data() для получения результатов.
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
})
вот все доступные функции и параметры запроса
Имя функции | Описание | Параметры | Возврат |
---|---|---|---|
findOne() |
возвращает результат первого совпадения | такой же, как find() |
объект Ex: {name:"",age:"",id:""} |
findById() |
Находит совпадающий документ с id | id | объект Ex: {name:"",age:"",id:""} |
create() |
Создает новый док | объект Ex: {name:"",age:"",} |
Resove/Reject |
update() |
Обновляет существующий док | id,updatedObject Ex: "uudefdsds",{name:"",age:"",} |
updatedObject |
deleteOne() |
Удалить один док с идентификатором | id Ex: "uudefdsds" |
Resove/Reject |
deleteMany() |
Удаляет все доки из списка идентификаторов | Массив Ex: [id1,id2,...] |
Resove/Reject |
search() |
Простой текстовый поиск с совпадением префикса или целого текста | Например: "name", "Joh" |
updatedObject |
Спасибо, что прочитали, попробуйте один раз.