Как работает запрос вложенных данных? Могу ли я получить данные с 1 уровня вниз? - PullRequest
0 голосов
/ 13 октября 2019

Я хочу запрашивать данные, которые находятся на два уровня ниже, но смогу ли я по-прежнему извлекать данные из его исходного узла?

Чтобы объяснить лучше, моя база данных Firebase выглядит следующим образом:

posts
  -192u3jdj0j9sj0
     -message: haha this is funny (CAN I STILL GET THIS DATA)
     -genre: comedy (CAN I STILL GET THIS DATA)
        -author
           -user: "jasonj"
        -comment
           -ajiwj2319j0jsf9d0jf
               -comment: "lol"
               -user: "David" (QUERY HERE****)
           -jfaiwjfoj1ijifjojif
               -comment: "so funny"
               -user: "Toddy"

Я хочу задать вопрос по всем комментариям Дэвида. Однако, как работает запрос, могу ли я взять оригинал (сообщение и жанр), который был с "уровня 1"? Или мне придется реструктурировать мои данные? Возможно переписать данные уровня 1 под комментарием.

(Конечная цель: что-то вроде ответов Yahoo, где пользователь может видеть вопросы, которые он отправил, а также вопросы, на которые он оставил комментарии)

Ниже работает код, но я не уверен, как получить данные уровня 1 или, если это вообще возможно

   ref = Database.database().reference().child("posts").child(myPost).child("comment")
    var queryRef:DatabaseQuery
    queryRef = ref.queryOrdered(byChild: "user").queryEqual(toValue: "David")
    queryRef.observeSingleEvent(of: .value, with: { (snapshot) in
        if snapshot.childrenCount > 0 {

1 Ответ

0 голосов
/ 13 октября 2019

Ваша текущая структура данных позволяет легко находить комментарии к конкретному сообщению. Это, однако, не позволяет легко найти комментарии от конкретного автора. Причина в том, что запросы к базе данных Firebase обрабатывают ваш контент как плоский список узлов. Значение, которое вы хотите отфильтровать, должно быть по фиксированному пути под каждым узлом.

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

"authorComments": {
  "David": {
    "-192u3jdj0j9sj0_-ajiwj2319j0jsf9d0jf": true
  },
  "Toddy": {
    "-192u3jdj0j9sj0_-jfaiwjfoj1ijifjojif": true
  }
}

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

Этот тип дублирования данных довольно распространен при использовании баз данных NoSQL, так как вам часто приходится модифицировать / расширять структуру данных, чтобы разрешить варианты использования, которые нужны вашему приложению.

Такжесм. мои ответы здесь:

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