在Firebase中,是否可以在不指定孩子的值的情况下读取孩子的数据?

时间:2019-12-24 13:56:27

标签: javascript firebase-realtime-database

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

Firebase

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

我该怎么做?

这是我的尝试-

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
    );
  });
};

1 个答案:

答案 0 :(得分:1)

您要查找的查询是在Firebase中完成的:

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

有关更多信息,请参见ordering and filtering data上的Firebase文档。


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

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

在这种情况下,典型的解决方案是仅在此用例中在数据库中创建所谓的反向索引。看起来像这样:

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