Загружайте только снимки Firebase с дочерним ключом

1

Моя структура данных выглядит так (удаленные ненужные части):

{
  "threads" : {
    "PUSHID" : {
      "info" : {
        "members" : {
          "uid" : true,
          "uid2" : true
        }
      }
    }
  }
}

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

firebase.database().ref('threads').on('child_added', function(snapshot) {
    if (snapshot.hasChild('info/members/' + userUid)) {
        // Display thread info
    }
});

Я попытался сделать запрос с .orderByChild('info/members/' + userUid) и удалить нулевые снимки, но мне пришлось бы добавить .indexOn для каждого userUid что явно нецелесообразно.

Теги:
firebase
firebase-realtime-database

1 ответ

0

Ваша текущая структура позволяет легко/эффективно искать пользователей для потока. Но ваш вариант использования - поиск потоков для пользователя. Вам нужно увеличить модель данных, чтобы разрешить прецедент:

{
  "user_threads" : {
    "uid": {
      "PUSHID": true,
      "PUSHID2": true
    },
    "uid2": {
      "PUSHID": true,
      "PUSHID3": true
    }
  }
}

И затем прочитайте это с помощью:

firebase.database().ref('user_threads/'+userUid).on('child_added', function(snapshot) {
  ...
});

Изменение или расширение вашей модели данных в соответствии с прецедентами вашего приложения довольно распространено при использовании баз данных NoSQL.

  • 0
    Я также должен учитывать безопасность и другие операции, которые я хочу выполнить. Структура моего вопроса составлена таким образом, чтобы я мог создавать правила безопасности, ограничивающие только владельцев, вносящих изменения в того, кто находится в каждом потоке. Я не знаю, как бы я сделал правила безопасности, чтобы запретить пользователям добавлять себя в потоки, к которым они не должны принадлежать, если бы я принял структуру данных, которую вы предлагаете.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню