Как искать в базе данных firebase по значению, содержащему объект? - PullRequest
0 голосов
/ 24 декабря 2018

У меня есть база данных firebase со следующей структурой

 ref
  |
  |-- rooms
  |    |
  |    .-- LUUZxjzhMQ9xf7d2-lU
  |          |
  |          seats
  |             |
  |             |-- east: 'frank'
  |             |-- north: 'mike'
  |             |-- south: 'john'
  |             |-- west: 'sam'

Firebase structure

Я пытаюсь удалить узел north:'mike'.

Я знаю, что могу сделать это, используя

var db = firebase.database().ref('rooms/LUUZxjzhMQ9xf7d2-lU/seats/north');
db.remove();

Но проблема в том, что mike не обязательно сочетается с north.Он может быть на east, west или south.Поэтому мне нужно найти узел, содержащий mike в качестве значения, а затем удалить его.

Я не смог придумать правильный способ поиска в базе данных Firebase для выполнения функции .remove().

PS: у меня уже есть ссылка на идентификатор объекта LUUZxjzhMQ9xf7d2-lU в моем коде.Поэтому мне нужно только найти уровень seats.

Вот что я попробовал:

var db = firebase.database().ref();
var path = 'rooms/LUUZxjzhMQ9xf7d2-lU/seats';
db.child(path).orderByChild('seats').equalTo('mike').remove();

Это не сработало.Поэтому я попытался:

var db = firebase.database().ref();
var path = 'rooms/LUUZxjzhMQ9xf7d2-lU';
db.child(path).orderByChild('seats').equalTo('mike').remove();

Это тоже не сработало.

Что я делаю не так?

1 Ответ

0 голосов
/ 24 декабря 2018

Вам нужно использовать orderByValue и удалить ребенка или детей, используя DataSanpshot:

var db = firebase.database().ref();
var path = 'rooms/LUUZxjzhMQ9xf7d2-lU/seats';
db.child(path).orderByValue().equalTo('mike').once('value')
  .then(snapshot => {
    snapshot.forEach(childSnapshot => {
      db.child(path + '/' + childSnapshot.ref.key).remove();
    });
  });

Это удалит всех потомков, которые имеют mike в качестве значения.

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