【发布时间】:2020-03-03 18:37:04
【问题描述】:
我正在尝试决定如何在 firestore 中建模数据。
基本上,它是用于列出餐厅提供的欢乐时光和其他特色菜的应用。每个餐厅/酒吧可能有多种特色菜和欢乐时光,具体取决于一周中的哪一天。
这是我希望如何对数据建模的一个非常简化的示例:
name: "Margaritaville",
geo: {
latitude: 42,
longitude: -105
},
offers {
0: {Type: Happy Hours, Time: 3p-6p, Mon: 1, Tue: 1, Wed: 1, Thu: 1, Fri: 0, Sat: 0, Sun: 0 },
1: {Type: Happy Hours, Time: 2p-5p, Mon: 0, Tue: 0, Wed: 0, Thu: 0, Fri: 1, Sat: 1, Sun: 0},
2: {Type: Happy Hours, Time: All Day, Mon: 0, Tue: 0, Wed: 0, Thu: 0, Fri: 0, Sat: 0, Sun: 1},
3: {Type: Brunch Special, Time: 11a-2p, Mon: 0, Tue: 0, Wed: 0, Thu: 0, Fri: 0, Sat: 0, Sun: 1}
},
etc: "foo",
etc: "bar"
我希望将所有报价数据作为嵌套对象存储在每个业务文档中,而不是作为单独的集合,因为大多数查询将需要大部分此类信息以及纬度/经度、照片、姓名等。但是……
我最终希望能够按星期几(星期一、星期二等)进行查询过滤,并提供时间和优惠类型(欢乐时光、早午餐)以及与用户的距离等。信息的建模方式但是,现在,在每个文档中创建的“优惠”是有序的(0、1、2 等),所以如果我想查询 10 英里内周一有欢乐时光特价的所有餐厅,例如,我希望做这样的事情:
db.collection("restaurants").where("offers.WILDCARD.days.Mon", "==", 1)
注意,上面的“WILDCARD”。有什么方法可以完成这项工作,还是我必须将报价移至单独的集合或子集合?我一直在努力解决反规范化问题,我只使用过 SQL 数据库,所以我愿意接受关于我应该如何考虑这个问题的建议。
【问题讨论】:
标签: firebase google-cloud-firestore nosql