【问题标题】:Query similar to a where clause in RD类似于 RD 中的 where 子句的查询
【发布时间】:2022-02-19 08:37:03
【问题描述】:

我在实时数据库中有以下结构:

我已经阅读了一些关于 SO 的问题,认为这是可能的,有些人说这是不可能的,所以我对这是否可以做到有点困惑,但是就这样吧。

我有多个成员(大约 200 个),我想只返回那些 mStatus == true 的成员。

我尝试这样做:

const dbRef = ref(db, `organization/${org}/members`);
const queryConstraints = [orderByChild("mStatus"), equalTo("value")]
get(query(dbRef, ...queryConstraints)).then((snapshot) => {
  if(snapshot.exists()) {
    console.log(snapshot.val());
  } else {
    console.log('No data available');
  }
})

return 为 null 这里是我使用的安全规则:

 "rules": {
    ".read": true,
    ".write": true,
      "members": {
        ".indexOn": ["mStatus"]
      }
  }

我将如何运行此查询?

【问题讨论】:

  • 为了运行该查询,您确实需要在安全规则中定义一个索引。该过程在您已链接的文档中进行了描述。如果您难以完成这项工作,请显示您尝试过的安全规则以及完整错误消息,而不仅仅是其中的一部分。
  • 请编辑您的问题并添加弗兰克要求的信息,也请回复@。
  • 感谢您的评论!我深入研究了这个并使用恐龙示例阅读了该页面我添加了安全规则(如更新的代码中所示)规则是否需要成为完整路径我得到了 null @FrankvanPuffelen
  • @AlexMamo 请见上文
  • 您添加的".indexOn": ["mStatus"] 根据每个子节点的mStatus 属性在members 下创建一个索引。所以乍一看还不错。 members是你数据库根目录下的一个节点吗?

标签: javascript firebase-realtime-database


【解决方案1】:

由于您在 cmets 中说您的 members 列表在 /organization/{uid}/ 下,这也是您必须在规则中定义索引的地方:

{
  "rules": {
    ...
    "organization": {
      "$uid": {
        "members": {
          ".indexOn": ["mStatus"]
        }
      }
    }
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-27
    • 1970-01-01
    • 2012-10-16
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 2017-12-04
    相关资源
    最近更新 更多