首页 > 解决方案 > 如何在 Firestore 中组织相关的时间和固定数据?

问题描述

我不知道如何在 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)显示今天的内容时:

我想了一个结构来根据日期关联固定内容,但我不知道该怎么做。

在我的应用程序中,将采用当前日期,并根据此数据,必须找到oficio、 forlaudes等的固定内容。

例如, in2019-03-25和 in2020-03-25是需要的内容09070325,而 in2021-03-25是需要的内容03070101

20190325
    oficio : 09070325
    laudes : 09070325

20190326
    oficio : 03070102
    laudes : 03070102

20200325
    oficio : 03070101
    laudes : 03070101

20210325
    oficio : 03070101
    laudes : 03070101

如何组织我的数据结构:

标签: javaandroidfirebasegoogle-cloud-firestore

解决方案


我能想到的最简单的解决方案是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. 这样它就可以工作一年。

编辑2:

根据 OP 的评论,我们同意一个可能的解决方案是创建一个关联日期和内容的日历节点。


推荐阅读