Как я могу удалить ребенка или детей, которые предоставляют определенные условия в базе данных Firebase - PullRequest
0 голосов
/ 03 мая 2020

Я новичок в firebase и не смог найти способ удалить объект (ы) из моей базы данных. Я искал около одного дня, и когда я пытался удалить его, он удаляет все объекты из моей части списка тегов базы данных. Вот мое дерево базы данных и мой код для удаления объекта списка тегов -M6QYGd-Hftv5NfS5KsI. Однако коды, которые я нашел и написал, удаляют все объекты taglist из базы данных. Есть ли способ удалить объекты списка тегов с именем «AHA» из базы данных

введите описание изображения здесь

введите описание изображения здесь

1 Ответ

0 голосов
/ 03 мая 2020

Я вижу, вы новичок в stackOverflow. Лучший способ опубликовать свой код - набрать его в самом вопросительном поле и нажать ctrl + k, выбрав часть кода.

В любом случае, из-за проблемы вы создаете анонимный (временный) запрос, когда вы call

databaseReferenceTagList.orderByChild("name").equalTo("AHA")

Ссылка в базе данных (которая физически существует в базе данных), такая как databaseReferenceTagList, может быть представлена ​​запросом, поскольку DatabaseReference наследуется от Query. Поскольку он имеет физическое существование, его можно удалить. Но каждый запрос не обязательно должен иметь ссылку (физическое существование).

Разработанный вами запрос состоит из ссылок на теги с именем «AHA» (они физически существуют). Однако не существует исключительного физического существования для списка тегов, чье имя «AHA». Это всего лишь часть большого списка тегов (который, конечно, физически существует в базе данных).

Таким образом, нижняя строка -

  • , вы можете удалить только эти элементы которые имеют физическое существование
  • Объекты, имеющие физическое существование, - это те, которые имеют ссылки
  • Все запросы не должны иметь ссылок. Только те, которые являются объектами DatabaseReference, имеют ссылку.

Теперь большая проблема в том, что даже если у запроса нет ссылки, у него есть данные и, следовательно, DataSnapShot. getRef() его DataSnapshot возвращает ссылку на ближайший родительский элемент запроса, на который имеется ссылка.

Поэтому созданный (временный) запрос возвращает ссылку на список тегов, когда вы вызываете его datasnapshots 'getRef.

И, следовательно, весь тэглист удаляется при вызове removeValue.

Решение состоит в том, чтобы вызывать removeValue только для ссылок, которые вы получаете из снимков данных фактических ссылок.

В вашем случае мы Знайте, что у каждого тега есть фактическое существование и мы можем вам это назвать removeValue. Поэтому вместо вызова removeValue для dataSnapshot,

for(DataSnapshot d:dataSnapshot.getChildren()){
   d.getRef().removeValue();
}

Это приведет к индивидуальному удалению каждого дочернего (в данном случае только одного) запроса, а не самой ссылки (которая является ошибочной).

Пожалуйста, не стесняйтесь комментировать, если у вас есть какие-либо сомнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...