Как организовать связанные временные и фиксированные данные в Firestore? - PullRequest
0 голосов
/ 25 марта 2019

Я не знаю, как мне добиться этой структуры данных в Firestore.

У меня есть такая структура:

Firestore-root
   |
   --- liturgia (collection)
   |     |
   |     --- lh (documents)
   |          |
   |          --- oficio (collection)
   |                |
   |                --- 03070101 (documents)
   |                        |
   |                        --- himno: "Today himno for today oficio"
   |                        |
   |                        --- read: "Today read for today oficio"
   |
   |                --- 03070102 (documents)
   |                        |
   |                        --- himno: "Today himno for today oficio"
   |                        |
   |                        --- read: "Today read for today oficio"
   |
   |                --- 09070325 (documents)
   |                        |
   |                        --- himno: "Today himno for today oficio"
   |                        |
   |                        --- read: "Today read for today oficio"
   |
   |          --- laudes (collection)
   |                |
   |                --- 03070101 (documents)
   |                        |
   |                        --- himno: "Today himno for today laudes"
   |                        |
   |                        --- read: "Today read for today laudes"
   |
   |                --- 03070102 (documents)
   |                        |
   |                        --- himno: "Today himno for today laudes"
   |                        |
   |                        --- read: "Today read for today laudes"
   |
   |                --- 09070325 (documents)
   |                        |
   |                        --- himno: "Today himno for today laudes"
   |                        |
   |                        --- read: "Today read for today laudes"

В oficio или в laudes есть документы с фиксированным контентом , этот контент никогда не меняется, и мне нужно использовать этот контент в соответствии с датой.

Например:

У меня есть дата на эту датунужен весь контент.Например, когда мне нужно показать содержимое за сегодня для oficio (или для laudes):

  • Для 2019-03-25 мне потребуется содержимое 09070325
  • Для 2019-03-26 мне потребуется содержимое 03070102

    ...

  • Для 2020-03-25 Мне потребуется содержимое 09070325

  • Для 2020-03-26 мне потребуется содержимое 03070103

    ...

  • Для 2021-03-25 мне понадобится содержимое 03070101

Я думаю о структуре, которая связывает фиксированный контент в соответствии с датами, но я не знаю, как это сделать.

В моем приложении будет взята текущая дата, и на основе этих данных должен быть найден фиксированный контент для oficio, для laudes и т. Д.

Например, в 2019-03-25и в 2020-03-25 необходим контент 09070325, но в 2021-03-25 нужен контент 03070101:

20190325
    oficio : 09070325
    laudes : 09070325

20190326
    oficio : 03070102
    laudes : 03070102

20200325
    oficio : 03070101
    laudes : 03070101

20210325
    oficio : 03070101
    laudes : 03070101

Как я могу организовать свою структуру данных так:

  • не нужно обновлять исправленные документы с содержанием
  • сопоставьте фиксированный контент с датами каждый год
  • получите фиксированный контент в соответствии с определенной датой, потребляя наименьшее количество ресурсов

1 Ответ

1 голос
/ 25 марта 2019

Самое простое решение, которое я могу придумать, - это использовать свойство date типа String для каждого из ваших документов и немного упростить вашу структуру.Таким образом, возможная структура может быть:

Firestore-root
   |
   --- liturgia (collection)
         |
         --- 03070101 (document)
              |
              --- himno: "Today himno for today oficio"
              |
              --- read: "Today read for today oficio"
              |
              --- date: "20190325"
              |
              --- length: "1h"

Чтобы получить сегодняшний документ, просто используйте следующий запрос:

FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
CollectionReference liturgiaRef = rootRef.collection("liturgia");
Query query = liturgiaRef.whereEqualTo("date", today);

В котором сегодня равно 20190325.Вот и все!

Редактировать:

Согласно вашему комментарию, вместо сохранения данных как date: "20190325" сохраните их только как date: "0325".Это означает, что вы можете делать запросы в соответствии с месяцем и днем ​​независимо от того, какой это год.В этом случае сегодня только 0325.Таким образом, он будет работать в течение каждого года.

Edit2:

Согласно комментариям OP, мы согласны, что возможным решением было бы создание узла календаря, который связываетдаты и содержание.

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