首页 > 解决方案 > 在 Firebase 中,是否可以在不指定孩子值的情况下读取孩子的数据?

问题描述

我想检索 targetUser 为Johnny的所有实例。

火力基地

问题是 Firebase 不允许我将.child()设为 null。

我怎样才能做到这一点?

这是我的尝试-

readTargetUser = () => {
  allHistory = [];
  let myHistory = firebase
    .database()
    .ref("/locations")
    .child()
    .child("targetUser" === "Johnny")
    .limitToLast(5);
  myHistory.on("value", snapshot => {
    console.log(
      "Here I can see all info where the targetUser is Johnny",
      snapshot
    );
  });
};

标签: javascriptfirebase-realtime-database

解决方案


您正在寻找一个查询,它在 Firebase 中是通过以下方式完成的:

  let myHistory = firebase
    .database()
    .ref("/locations")
    .child("GG99AaPQjMhr0kT1xFkazjHMUrm1")
    .orderByChild("targetUser")
    .equalTo("Johnny")
    .limitToLast(5);

有关这方面的更多信息,请参阅有关排序和过滤数据的 Firebase 文档。


如果您不知道GG99AaPQjMhr0kT1xFkazjHMUrm1节点,则无法对targetUser属性进行排序/过滤,因为 Firebase 数据库查询只能对每个子节点下位于已知路径的属性进行排序。

在这里查看我的答案:Firebase Query Double Nested

在这种情况下,典型的解决方案是在您的数据库中创建一个所谓的倒排索引,纯粹是为了这个用例。它看起来像:

targetUsers: {
  "Johnny": {
    "GG99AaPQjMhr0kT1xFkazjHMUrm1_1577194136959": true,
    ".../...": true
  }
}

推荐阅读