原文:我遇到了一些我无法弄清楚的事情: 我有一个客户列表及其数据,我有一个日历日期列表,其中客户在Firebase中标记为可用。我需要弄清楚如何根据日历排除客户。 我一直在搜索,发现这个问题几乎回答了我的问题:
更新:我现在已将Firebase数据库更改为不必将父母分开,而是将其包含在客户中
How to filter Firebase data in Swift?
// This is my new code from the link above
ref.child("customers").queryOrdered(byChild: "calendar").
queryEqual(toValue: true).observe(.childAdded, with: { snapshot in
let snapshotDict = snapshot.value as? NSDictionary
let name = snapshotDict?["Name"] as! String
let email = snapshotDict?["Email"] as! String
let rating = snapshotDict?["Rating"] as! String
let key = snapshot.key
self.posts.insert(postStruct(name: name, email: email, rating: rating, key: key), at: 0)
self.tableView.reloadData()
所以,如果我只检查"日历"的价值? = true,这会有效。但我在日历中有几个键和值,我不知道下一步。我的数据库如下所示:
customers:
- sk1239sdkq2312lk
- calendar
- 9. june, 2018
- 1 : 10:00
- lk3j4590gsdflkj2
- calendar
- 9. june, 2018
- 1 : 10:00
- x98123jasdhasdss
- calendar
- 9. june, 2018
- 3 : 12:00
我只想在我的桌子上插入两个第一批客户,他们分别是9月8日,2018年和1点10:00。
我有日期(2018年6月9日)和时间(10:00)我正在寻找,但不是数字(1,2,3)。
我该怎么做?
答案 0 :(得分:0)
实时数据库和Cloud Firestore都不支持对多个集合(或子集合)进行单一查询。
在检索所有客户后,您可以在客户端保留对日历集合的引用并对其进行查询。这有明显的缺点。
另一个选项是在Customer
模型中包含一个字段(例如usedCalendar
),默认为false,然后使用Firebase Cloud Functions保持该字段值一致。您可以将onCreate()
和onDelete()
摘要添加到calendar
集合中,并更新相应客户的usedCalendar
值。
答案 1 :(得分:0)
这似乎归结为正确构建数据库架构。一旦完成,它应该很容易。首先,使用Firestore,除非有充分的理由不这样做。 ...假设您可以使用Firestore,似乎您将拥有一个(相当标准的)根级users
集合,其中每个user
都有一个名为operating
的(子)集合,其中包含完整的文档uid
的。每个文档都有一个名为activity
的属性,可以是“会面”或“休假”或“忙碌”等。
我正在做类似的事情来存储我的用户送货地点。
Firestore supports compound queries因此,填写日历应该相当容易。