【问题标题】:Firebase Realtime Database Query Retrieve Records in Array - AndroidFirebase 实时数据库查询检索数组中的记录 - Android
【发布时间】:2018-03-13 12:49:03
【问题描述】:

我有一个像下面这样的实时数据库结构。 用户有一些朋友。例如,我是 Joe,我想获取朋友是 Joe 的用户。

在本例中,Dave 和 Harry 有一个朋友叫 Joe,所以我的查询应该获取 Dave 和 Harry,但不应该获取 Micheal。

有没有办法在不循环获取数据的情况下做到这一点?

{
"Users": {
    "Joe": {
        "Friends": ["Dave","Harry","Micheal"]
    },
    "Dave": {
        "Friends": ["Joe","Jack","Brent"]
    },
    "Harry": {
        "Friends": ["Jack","Joe"]
    },
    "Micheal": {
        "Friends": ["Ken","Jack","Brent"]
    }
}

}

【问题讨论】:

  • 您问的是实时数据库还是 Firestore?
  • 实时数据库

标签: android firebase firebase-realtime-database


【解决方案1】:

Firebase 实时数据库无法跨array 成员执行查询,以查看它是否在任何位置包含特定值或添加/删除记录。 Firebase 文档建议不要使用数组。 Firebase 建议不要使用数组的众多原因之一是它使安全规则无法编写。

与 NoSQL 数据库一样:如果您无法使用当前数据结构执行您想要的用例,您通常可以更改/扩展您的数据结构以允许该用例。最佳实践是使用maps 而不是数组。可能的数据库结构如下所示:

"Users": {
    "Joe": {
        "Friends"
            "Dave": true,
            "Harry": true,
            "Micheal": true
    },
    "Dave": {
        "Friends"
            "Joe": true,
            "Jack":true,
            "Brent": true

    },
    "Harry": {
        "Friends"
            "Jack": true,
            "Joe": true
    },
    "Micheal": {
        "Friends"
            "Ken":true,
            "Jack": true,
            "Brent": true
    }
}

您也可以查看here,了解更多信息。

【讨论】:

  • 一切都好吗?问题解决了吗?
  • 无论如何,你的回答 Alex 对我很有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-15
  • 2017-10-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多