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

Я пытаюсь получить список сообщений, где кто-то опубликовал комментарий за последние 2 дня из базы данных Firebase в реальном времени.

const currentTime = Date.now();
const twoDaysAgo = currentTime - (2 * 24 * 60 * 60 * 1000);

Database.ref(`posts`).orderByChild(`comments/{comment}/createdAt`).endAt(twoDaysAgo).on('child_added', snapshot => {
    console.log(snapshot.val());
});

Я думаю, что я делаю что-то не так в части orderByChild потому что я получаю все сообщения.

Моя структура базы данных выглядит следующим образом

enter image description here

1 Ответ

1 голос
/ 03 мая 2020

Запросы в базе данных Firebase Realtime могут упорядочивать / фильтровать только значения, которые находятся по известному пути под каждым дочерним элементом. Ваш .orderByChild(`comments/{comment}/createdAt`) не работает. Подробнее об этом см. Запрос Firebase с двойным вложением и Запрос Firebase, если дочерний элемент child содержит значение .

Как обычно при работе с базами данных No SQL, решение состоит в том, чтобы изменить вашу модель данных, чтобы позволить вариант использования. В этом случае вы можете добавить свойство lastCommentAt к каждому сообщению и обновлять его всякий раз, когда вы пишете комментарий к сообщению. С этим новым свойством запрос становится следующим:

Database.ref(`posts`).orderByChild(`lastCommentAt`).endAt(twoDaysAgo)...

. Отдельное примечание: ваше вложение комментариев под самими постами нарушает некоторые рекомендации, сделанные в документации Firebase относительно моделирования данных. , В частности, вам следует избегать вложения данных и сглаживания структур данных , чтобы гарантировать, что данные масштабируются .

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