【问题标题】:Query orderByChild in Firebase Realtime Database not working?在 Firebase 实时数据库中查询 orderByChild 不起作用?
【发布时间】:2021-06-22 20:00:16
【问题描述】:

我看到很多帖子和解决方案正是我所需要的,但是当我实施它时它不起作用。我正在使用 Firebase 实时数据库,并且正在尝试在所有“名称”子项中搜索特定名称。在此示例中,我直接添加了字符串,但将来我将使用基于用户输入的变量。这是我在 firebase 中看到的数据库结构:

{
  "kjienk24dfwefn" : {
    "FriendID" : "fr1959l9591i4925a",
    "Name" : "Test Dummy2",
    "email": "something@gmail.com",
    "Status" : "InGame"
  },
  "kjienk24kdfiwne" : {
    "FriendID" : "fr2812p8092m3604l",
    "Name" : "Test Dummy",
    "email":"some@something.com"
    "Status" : "Online"
  },
  "kjienk24udfjjo" : {
    "FriendID" : "fr7605h9204f8099g",
    "Name" : "Test Dummy3",
    "email": "fake@fakeemail.com"
    "Status" : "Offline"
  }
}

这是我用来查询“名称”的代码(usersRef 指向“firebase.database().ref()”)。我在网上看到了很多这样的例子,但我不确定我做错了什么。

usersRef.orderByChild("Name").equalTo("Test Dummy").on("value", function(snapshot) {
    //This is where I expect to see Test Dummy on the console.  
    console.log(snapshot.val())
});

编辑:这是 usersRef 的初始化。读取和写入数据库没有任何问题。标准 firebaseConfig。:

const fbApp = firebase.initializeApp(firebaseConfig);
const db2 = fbApp.database("https://firebasedatabaseurl.com/")
const usersRef = db2.ref();

用父节点测试:

提前谢谢大家!

【问题讨论】:

  • 我在下面发布了一个答案,但事后看来,我不确定这是否是您正在努力解决的问题。 1)你能用数据库中的实际JSON替换你拥有的数据结构吗(作为文本,请不要截图)?您可以通过单击Firebase Database console 上溢出菜单 (⠇) 中的“导出 JSON”链接来获取此信息。 2)如果我们能在问题中看到usersRef是如何初始化的,那也很好。
  • 嗨弗兰克,我添加了出口信息。更改了信息,但这是我导出时得到的确切结构。 “kjie...”是用户 ID。
  • 嗯,乍一看还不错。你能不能也展示一下你是如何初始化usersRef的?
  • 它似乎对我有用:jsbin.com/soqinad/1/edit?js,console
  • 我看到在我看过的所有示例中,您在 ref("argument") 中添加了一个参数。但是因为我引用了我的主数据库节点,所以我把它留空了。我要不要再添加数据库的名称?

标签: javascript json firebase search firebase-realtime-database


【解决方案1】:

您想从users 节点加载数据,但目前在您的代码中没有提到这一点。所以 Firebase 正在查询您数据库的根目录,而那里的子节点(如 users)没有 Name 属性,因此您没有得到任何结果。

const usersRef = db2.ref().child("users");

或者:

const usersRef = db2.ref("users");

【讨论】:

  • 我只是不确定应该在 ref() 中放什么,因为没有“用户”父节点,我相信它们是我的数据库“根”的子节点。
  • 在这种情况下,那里不需要任何东西。你能在像 jsbin 这样的网站上创建一个复制品吗,就像我在 cmets 和 jsbin.com/soqinad/1/edit?js,console 中所做的那样
  • 如果您已经在 firebaseConfig 中拥有 URL,您也不应该在 fbApp.database("https://firebasedatabaseurl.com/") 中传递它。
  • 我会尝试在 jsBin 上弄点东西,我需要更改安全规则。我知道你说没有快照,但我发布了一个以确保我正确地告诉你我的 userId 是根的孩子。
  • 关于数据库,我有 3 个独立的实时数据库,以便配置第二个。我这样做了,所以它共享身份验证状态。在 firebaseConfig 我有默认的数据库 URL。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-26
  • 1970-01-01
  • 1970-01-01
  • 2018-02-07
相关资源
最近更新 更多