java - 如何在 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
)显示今天的内容时:
- 因为
2019-03-25
我需要的内容09070325
因为
2019-03-26
我需要的内容03070102
...
因为
2020-03-25
我需要的内容09070325
因为
2020-03-26
我需要的内容03070103
...
因为
2021-03-25
我需要的内容03070101
我想了一个结构来根据日期关联固定内容,但我不知道该怎么做。
在我的应用程序中,将采用当前日期,并根据此数据,必须找到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
如何组织我的数据结构:
- 不必更新固定内容文件
- 将固定内容与每年的日期联系起来
- 根据给定的日期获取固定的内容消耗最少的资源
解决方案
我能想到的最简单的解决方案是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 的评论,我们同意一个可能的解决方案是创建一个关联日期和内容的日历节点。
推荐阅读
- sql - 如何修复javafx中的“表上没有唯一或主键约束”sql错误?
- windows - 登录到 Web 服务器身份验证用户不是管理员
- mysql - 创建视图,错误代码:1052。字段中的“id”列不明确
- android - 是否可以远程更新在 Kiosk 模式下运行的 Android 应用程序?
- python - Python:使用事件循环从脚本启动时外部程序的缓慢/延迟执行[Windows]
- javascript - 使用概率选择数组值
- swift - 如何使用 dispatchQueues 创建引用循环?
- sql - 使用 Oracle SQL 窗口函数以部分数量满足多个需求的 SQL 查询
- angular - 在 app.module.ts 中初始化 firestore 时如何禁用 firestore 持久性?
- c++ - 表达式 std::enable_if 中的 type* 是什么