如何在 Firebase 中使用通配符?

Posted

技术标签:

【中文标题】如何在 Firebase 中使用通配符?【英文标题】:How to use wildcard in Firebase? 【发布时间】:2017-08-11 02:16:25 【问题描述】:

这是我的 Firebase 数据库结构:

ft-records
  userX@gmail_com
    2013-01-01 00:00:00 GMT
        addedByUser: "userX@gmail.com"
        notes: "Boooo"
        time: "2013-01-01 00:00:00 GMT"
    2013-01-02 10:00:00 GMT
        addedByUser: "userX@gmail.com"
        notes: "Yeaah"
        time: "2013-01-02 10:00:00 GMT"
  userY@gmail_com
    2013-01-01 03:00:00 GMT
        addedByUser: "userY@gmail.com"
        notes: "Ok"
        time: "2013-01-01 03:00:00 GMT"

我可以像这样为经过身份验证的用户查询这些数据,例如userX@gmail_com

let userRecords = self.ref.child(self.user.email.replacingOccurrences(of: ".", with: "_", options: .literal, range: nil))

userRecords.queryOrdered(byChild: "time").queryStarting(atValue: startOfDayDateString).queryEnding(atValue:endOfDayDateString).observe(FIRDataEventType.value, with:  snapshot in ...  )

但是如果我想查询所有用户在特定日期的所有笔记,我该如何实现呢?

我需要一个通配符来从根目录读取所有孩子,然后按每个孩子的时间查询。但我不知道该怎么做。

我可以这样做吗?

let ref = FIRDatabase.database().reference(withPath: "ft-records/*")

【问题讨论】:

【参考方案1】:

您将为此使用 Firebase 数据库查询。

let ref = FIRDatabase.database().reference(withPath: "ft-records")
let query =ref.queryOrdered(byChild: "time").queryStarting(atValue: "2013-01-02 00:00:00 GMT").queryEnding(atValue: "2013-01-02 23:59:59 GMT")

有关详细信息,请参阅Firebase documentation on filtering data 和 Firebase codelab for ios

【讨论】:

我不明白。 ft-records 的孩子是 userX@gmail_comuserY@gmail_com。没有可查询的time。我错过了什么吗? 对了,里面多了一个关卡。您不能跨多个动态级别进行查询。 拒绝投票的原因:我认为答案应该更新为您作为评论提供的答案,如果仍然如此的话。 (另外,你自己承认,它误解了 OP 的问题。)

以上是关于如何在 Firebase 中使用通配符?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Firebase 云函数中的通配符获取数据

如果已知通配符,Firebase会使用通配符来读取数据

对于 Firebase 动态链接,如果您使用 IOS 通配符,您应该为团队 ID 输入啥?

Firebase 规则通配符和子级比较

我如何在 JWT 中使用通配符,除非?

如何在 IO 函数的路径中使用 %username% 通配符