Firebase: трудности с динамическим манипулированием данными - PullRequest
0 голосов
/ 17 сентября 2018

У меня трудности с тем, что в течение нескольких дней я делал то, что хотел бы сделать в своем веб-приложении (angular + firebase).

Вот один пример (это чат):

messages
    |__ 1
        |__ author: "foo"
        |__ message: "hello world"
        |__ playerExcluded: "foo2"
    |__ 2
        |__ author: "foo2"
        |__ message: "hello world"
        |__ playerExcluded: "foo"

Я хочу перечислить все сообщения, где currentUser! = PlayerExluded (пользователь может видеть все сообщения, кроме сообщений, где он исключен), и оно должно быть динамическим.

Я знаю, что это невозможно сделать с помощью запросов к базе данных Firebase, поэтому я начал изучать облачные функции, но триггера «при чтении» нет.

Давайте представим, что это возможно с запросами, это будет что-то вроде:

firebase.database().ref('/messages').orderByChild('playerExcluded').differentTo(playerUsername)

Есть ли способ сделать это с помощью Firebase (в динамической манере)?

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Вы хотите получить все сообщения, где playerExcluded != playerUsername.Итак, я не предоставляю вам весь код, а просто идею, как вы можете это сделать.

Во-первых, извлеките весь узел messages с помощью listenerForSingleValueEvent.

Затем переберите его потомков по foreach loop.И проверьте, соответствует ли playerExcluded значение playerUsername, если это так, то проигнорируйте эту одну итерацию с помощью continue, а если нет, то сохраните ее в Array.

В конце дня выУ Array будут все необходимые данные.

0 голосов
/ 17 сентября 2018

Как вы обнаружили, в облачных функциях действительно нет триггера базы данных onRead.Вы можете имитировать поведение, создавая свою собственную функцию HTTPS, которую вы затем вызываете из приложения .

Но обратите внимание, что Admin SDK для базы данных реального времени (которую вы используете в облачных функциях) также не позволяет выполнять запрос, который вы ищете.Таким образом, вам все равно придется загрузить все сообщения и отфильтровать исключенные в коде.

...