Как удалить запись из Firebase по конкретному полю?

Есть структура БД:
Хочу удалить все
по categoryId. Хочу примерно такой код:
import firebase from "firebase/app" async deleteCategory(, cat_id) < const uid = await dispatch('getUid') // получаю конкретного пользователя await firebase.database().ref(`users/$/records`).WHERE('categoryId' === cat_id) >
Но в firebase нет
и даже ничего похожего, как быть?
- Вопрос задан более трёх лет назад
- 582 просмотра
удаление записи в Firebase

Имею такую структуру: Хочу по нажатию удалять запись в базе данных.Как указать базе номер записи которую я хочу удалить. Для примера пробовал удалять так но тоже ничего не вышло.
Query applesQuery = FirebaseDatabase.getInstance().getReference().child("event").orderByChild("title").equalTo("TITLE"); applesQuery.addListenerForSingleValueEvent(new ValueEventListener() < @Override public void onDataChange(DataSnapshot dataSnapshot) < for (DataSnapshot appleSnapshot: dataSnapshot.getChildren()) < appleSnapshot.getRef().removeValue(); >> @Override public void onCancelled(DatabaseError databaseError) < Log.e(TAG, "onCancelled", databaseError.toException()); >>);
Отслеживать
задан 6 мая 2017 в 18:01
1,360 1 1 золотой знак 9 9 серебряных знаков 21 21 бронзовый знак
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Если я правильно понял, то у вас записи загружаются в список recyclerview, в своё время я делал как-то вот так:
mRecyclerView.addOnItemTouchListener(new RecyclerItemClickListener(getContext(), mRecyclerView, new RecyclerItemClickListener.OnItemClickListener() < @Override public void onItemClick(View view, int position) < //do nothing >@Override public void onLongItemClick(View view, int position) < DatabaseReference dat = mAdapter.getRef(position); dat.removeValue(); Toast.makeText(getContext(), "Удалено", Toast.LENGTH_SHORT).show(); >>));
mAdapter здесь это это инициализированный и настроенный FirebaseRecyclerAdapter. Обрабатывание нажатий на элемент recyclerview в этом примере происходит с помощью класса RecyclerItemClickListener. Его можно взять отсюда, второй ответ. Добавьте его в проект.
Создание вызовов Create, Read, Update и Delete с использованием Firebase
В этой статье будет показано, как создавать вызовы Create, Read, Update и Delete с помощью службы Firebase V9.
Создать документ в Firebase
Типы данных в firebase.
Думайте о документе как об объекте Project, а о коллекции — как о массиве проектов.
- Документ —Запись, содержащая поля, которые сопоставляются со значениями.
Размер документов ограничен 1 МБ.
Создать документ
Чтобы создать документ, мы можем действовать двумя способами через консоль в консоли Firebase или напрямую в коде.
- Создавайте документы и коллекции в Firebase Console
2. Создание документов и коллекций в Code
Для этого нам сначала нужно настроить наш проект Firebase в IDE. Для созданного проекта настройки проекта находятся на консоли. Посмотрите на картинку.
Добавляем их в наш файл index.js и импортируем нужную функцию из библиотеки firebase. Следующий код позволяет нам добавить новую коллекцию и документы.
Файл index.html
Файл index.js:
import from 'firebase/app'
import getFirestore, collection,
addDoc, deleteDoc, doc,
onSnapshot,
query,
orderBy, serverTimestamp,
updateDoc
> from 'firebase/firestore'
const firebaseConfig = apiKey: "AIzaSyCcm_tgeTsfrSK3byC2_ybThiXC_Mn98M0",
authDomain: "fir-article-9083b.firebaseapp.com",
projectId: "fir-article-9083b",
storageBucket: "fir-article-9083b.appspot.com",
messagingSenderId: "149121485260",
appId: "1:149121485260:web:89cd4f9d2b1e7443163569"
>;
initializeApp(firebaseConfig)
// initialize the application
const db = getFirestore()
// ссылка на коллекцию
const colRef = collection(db, 'Projects')
// добавление проектов
const addProjectForm = document.querySelector('.add')
addProjectForm.addEventListener('submit', (e) => e.preventDefault() // чтобы страница не обновлялась. По умолчанию submit обновляет страницу
// addDoc является асинхронным и возвращает обещание, поэтому мы используем его с методом then()
addDoc(colRef, title: addProjectForm.title.value,
technologies: addProjectForm.technologies.value,
image: addProjectForm.image.value,
description: addProjectForm.description.value,
createdAt: serverTimestamp()
>)
.then(() => addProjectForm.reset() // чтобы очистить поля ввода
>)
>)
Методы addDoc, collection, getFirestore и serverTimesstamp импортируются из библиотеки firebase/firestore.
Прочитать документ в Firebase
Получить данные из firebase довольно просто. Нам нужно сначала создать запрос, а затем использовать запрос в методе для получения данных.
// queries
const q = query(colRef, orderBy('createdAt'))
// real time collection data
onSnapshot(q, (snapshot) => let projects = []
snapshot.docs.forEach((doc) => projects.push()
>)
console.log(projects)
>)
Метод onSnapshot импортируется из библиотеки firebase/firestore.
Обновить документ в Firebase
Для обновления документов в качестве одного из параметров необходимо указать путь.
index.html
index.js
// updating a document
const updateForm = document.querySelector('.update')
updateForm.addEventListener('submit', (e) => e.preventDefault()
const docRef = doc(db, "Projects", updateForm.id.value)
updateDoc(docRef, title: 'new title',
>).then(() => ).catch((err) => )
>)
В примере я хотел изменить заголовок элемента, передав его идентификатор вручную.
нотабене: Если путь написан неправильно, коллекция будет создана с этим именем. Метод updateDoc импортируется из библиотеки firebase/firestore.
Удалить документ в Firebase
Чтобы удалить документ из коллекции, логика та же. Сначала создайте форму:
index.html
index.js
const deleteProjectForm = document.querySelector('.delete')
deleteProjectForm.addEventListener('submit', (e) => e.preventDefault()
const docRef = doc(db, "Projects", deleteProjectForm.id.value)
deleteDoc(docRef).then(() => deleteProjectForm.reset() // to empty the input fields
>)
>)
Метод deleteDoc только что импортирован из библиотеки firebase/firestore.
Firebase Tutorial — Firebase database. Part I.
Постановка задачи: Познакомиться с Firebase. Зарегистрировать приложение на console.firebase.google.com. Познакомиться с NoSQL базой данных Firebase.
О Firebase (обзор):
- https://www.youtube.com/watch?v=0mRmHqz0-W8
- https://www.youtube.com/watch?v=CDXUczHzZn8
- https://www.youtube.com/watch?v=4kcN65wICVs
- https://www.youtube.com/watch?v=KGsPL7o2R7E — краткий обзор
Подключение к Firebase
Подключится можно двумя способами: автоматически и вручную. Подключимся автоматически. В Android Studio выбираем Tools — Firebase. Открывается Firebase Assistant. Нам нужно Realtime Database.

Сначала Assiatant предложит подключить приложение к Firebase. Нажимаем. Следуем инструкциям (необходим аккаутн Google). Подключили. Затем добавляем Realtime Database в наше приложение. Если все ок, в Assistant мы получим надпись зеленым шрифтом: “Dependencies set up correctly”.

В консоли Firebase теперь можно увидеть наш проект:

Если что-то пошло не так, можно подключить проект вручную. Наглядный пример см. здесь
Теперь добавим простое меню, по которому мы будем добавлять записи, сохранять изменения редактируемых записей и удалять записи в базе данных. Итак, добавим три иконки (ic_new, ic_remove, ic_save), например такие:
![]()
и добавим соответствующий им файл меню в наш проект. Для этого в res добавляем папку menu и там создаем файл “menu_main.xml”:
Теперь добавим Toolbar. В файле res — values — styles.xml параметр parent у “AppTheme” меняем на parent=”Theme.AppCompat.Light.NoActionBar”
В “activity_main.xml” добавляем описание макета Toolbar:
И, наконец, регистрируем Toolbar в MainActivity:
Инициализируем созданное нами меню. Для этого переопределяем в MainActivity onCreateOptionsMenu(…):
Создадим модель данных, которые мы будем хранить в Firebase. Пусть это будет список контактов у которых есть поле name и поле email.
В MainActivity будем отображать список контактов в виде ListView. Добавим макет элемента списка. В layout создаем “listview_item.xml”:
Добавим формы для ввода в макет главного окна, в “activity_main.xml” добавляем:
При этом надо учесть, что т.к. мы используем TextInputLayout у нас должна быть в build.gradle (Module:app) подключена библотека design, например ‘com.android.support:design:26.1.0’
Добавим в “activity_main.xml” ListView в котором будет отображаться список контактов:
Добавим также ProgressBar в “activity_main.xml”, который будет показывать что данные загружаются с Firebase:
В Preview получим примерно такое:

Таким образом, макет отображения данных у нас есть. Теперь возмемся за начинку.
Создаем модель данных:
Пишем адаптер для ListView:
И инициализируем все View, используемые нами, в MainActivity:
Наконец, перейдем к Firebase. Инициализируем Firebase и получим ссылку на базу данных. Для этого добавляем в onCreate(…) функцию initFirebase():
Теперь в onCreate(…) добавляем функцию addEventFirebaseListener() в которой создадим слушатель, который будет обнавлять записи в ListView, когда в базе данных Firebase происходят изменения:
Тут необходимо понять, что из себя представляет класс DataSnapshot. Экземпляр этого класса содержит данные из Firebase database. Т.е. всякий раз когда мы читаем данные из базы данных Firebase, мы получаем их в виде DataSnapshot. Это своеобразные “снимки” состояния базы данных, через которые мы можем получить данные из базы, но не можем как-то воздействовать на эти данные. Более подробную информацию см. в документации.
Теперь в консоли Firebase в разделе Database изменим правила, чтобы данные читались и писались из нашего приложения в базу данных Firebase без прохождения процедуры авторизации (в учебных целях). Для этого для чтения и записи выставляем “true”. Публикуем правила.

Наконец описываем что-же произойдет когда мы нажимаем на кнопки ранее созданного меню (напомним: “создать запись”, “сохранить изменения в записи”, “удалить запись”).
Переопределяем функцию onOptionsItemSelected(MenuItem item), которая ловит нажатия на кнопки меню:
Теперь нам надо написать тело функций createUser(), updateUser(selectedUser) и deleteUser(selectedUser), но для начала переопределим слушатель нажатия на элемент списка ListView, чтобы определять выбранную запись = selectedUser. Создаем глобальную переменную selectedUser и пишем тело слушателя нажатия на элемент ListView в onCreate(…):
Если все сделали правильно, длжно работать. Мы можем добавлять данные в базуданных Firebase, редактировать и удалять их. В консоли Firebase изменение данных можно наблюдать “в прямом эфире”:

В консоле Firebase:

Например, когда мы удаляем данные, в консоли они окрашиваются в красный цвет:

26 11 2017
- Android
- Android Quizzes 2021
- Review Currency App task.
- Foreground Service Android demo App — stopwatch
- Simple Custom View demo App — circular progress bar
- Simple RecyclerView demo App — Stopwatch
- RS School Android 2021
- Реактивное программирование с применением RxJava
- Android изнутри. Часть I
- Большие запросы к базе данных на Android
- ProgressDialog умер, да здравствует ProgressBar!
- Введение в Android Architecture Components
- Firebase Tutorial. Part II. — Как автоматически развернуть сайт на хостинге Firebase из GitHub-репозитория?
- Firebase Tutorial — Firebase database. Part I.
- У меня было 10 Android собеседований за последние два года. (перевод)
- Android Tutorial — Facebook SDK Login. Part III. Get Posts.
- Android Tutorial — Facebook SDK Login. Part II. Share content.
- Android Tutorial — Facebook SDK Login. Part I.
- Оптимизация прокрутки вложенных в друг друга RecyclerView
- RecyclerView и ListView. В чем разница?
- Различные типы Item View в RecyclerView
- Тесты сделают вас счастливее (перевод).
- Пример анимации в Android с использованием TimeAnimator.
- Android. Два способа записать результат Timer в пользовательский поток (UI Thread).
- Видео. Architecture Components. Solving the Lifecycle Problem. Перевод субтитров.
- Зачем нужны интерфейсы в ООП?
- Видео. Architecture Components. Improve Your App’s Design. Перевод субтитров.
- Видео. Google I/O ’17 Architecture Components — Introduction. Перевод субтитров.
- Препарирование ContentProvider
- REST. Описание концепции. Особенности реализации API. Максимально кратко.
- Лоадеры (loaders) в Android. Для чего нужны. Конспект.
- Volley vs Retrofit. Описание библиотек REST API.
- Несколько примеров на Kotlin
- Препарирование RecyclerView
- Лексикон прописных истин Android
- Xamarin.Forms. Layouts — виды
- Xamarin.Forms. Оптимизация ListView.
- Xamarin.Forms. Ускорение отображения окна (Activity)
- Платформозависимость на Xamarin
- Android Quizzes 2021
- Реактивное программирование с применением RxJava
- Android изнутри. Часть I
- Большие запросы к базе данных на Android
- ProgressDialog умер, да здравствует ProgressBar!
- Введение в Android Architecture Components
- Firebase Tutorial. Part II. — Как автоматически развернуть сайт на хостинге Firebase из GitHub-репозитория?
- Firebase Tutorial — Firebase database. Part I.
- У меня было 10 Android собеседований за последние два года. (перевод)
- Android Tutorial — Facebook SDK Login. Part III. Get Posts.
- Android Tutorial — Facebook SDK Login. Part II. Share content.
- Android Tutorial — Facebook SDK Login. Part I.
- Оптимизация прокрутки вложенных в друг друга RecyclerView
- RecyclerView и ListView. В чем разница?
- Различные типы Item View в RecyclerView
- Тесты сделают вас счастливее (перевод).
- Пример анимации в Android с использованием TimeAnimator.
- Android. Два способа записать результат Timer в пользовательский поток (UI Thread).
- Видео. Architecture Components. Solving the Lifecycle Problem. Перевод субтитров.
- Зачем нужны интерфейсы в ООП?
- Видео. Architecture Components. Improve Your App’s Design. Перевод субтитров.
- Видео. Google I/O ’17 Architecture Components — Introduction. Перевод субтитров.
- Препарирование ContentProvider
- REST. Описание концепции. Особенности реализации API. Максимально кратко.
- Лоадеры (loaders) в Android. Для чего нужны. Конспект.
- Volley vs Retrofit. Описание библиотек REST API.
- Краткий конспект реализации Garbage Collector в Java
- Препарирование RecyclerView
- Лексикон прописных истин Android
- Firebase Tutorial. Part II. — Как автоматически развернуть сайт на хостинге Firebase из GitHub-репозитория?
- Firebase Tutorial — Firebase database. Part I.