Исправление запросов Firebase Firestore с помощью firestore-db для web и react-native-firebase


Мотивация

Я работаю с 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

Спасибо, что прочитали, попробуйте один раз.

Оцените статью
devanswers.ru
Добавить комментарий