Javascript 如何使用orderByChild equalTo检索子节点的完整路径?

Javascript 如何使用orderByChild equalTo检索子节点的完整路径?,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,是否可以使用orderByChild.equalTo从firebase查询检索到子节点的完整路径?我有。indexOn:“城市” 我的数据结构如下: 我试过: firebase.database().ref('users').orderByChild('city').equalTo('calgary').once("value", function(snapshot) { console.log(snapshot.ref.toString()); }); 我也尝试过: console.l

是否可以使用orderByChild.equalTo从firebase查询检索到子节点的完整路径?我有。indexOn:“城市”

我的数据结构如下:

我试过:

firebase.database().ref('users').orderByChild('city').equalTo('calgary').once("value", function(snapshot) {
  console.log(snapshot.ref.toString());
});
我也尝试过:

console.log(snapshot.ref.toString());
//outputs: https://xxxx.firebaseio.com/users <-- WRONG, not full path.

console.log(snapshot.ref.path.toString());
//outputs /users <-- WRONG, not full path.
console.log(snapshot.ref.toString());

//产出:https://xxxx.firebaseio.com/users 要获取数据的完整限定URL,可以调用

要仅获取相同数据的路径,可以从完整路径中减去根路径:

snapshot.ref.toString().substring(snapshot.ref.root.toString().length - 1)
另请参见:,我将把您的问题标记为重复


由于您对Firebase数据库执行查询,因此可能会有多个结果。因此,快照包含这些结果的列表。即使只有一个结果,快照也将包含一个结果列表

您需要循环这些结果,然后才能获得每个节点的路径:

firebase.database.ref('users').orderByChild('city').equalTo('calgary').once("value", function(snapshot) {
  var rootPath = snapshot.ref.root.toString();
  snapshot.forEach(function(child) {
    console.log(child.ref.toString().substring(rootPath.length - 1));
  })
});

结果证明你的搜索是错误的。由于您试图在
location/city
上订购/筛选,因此您也应该在
orderByChild()
中使用它:


我觉得这不应该被标记为重复,因为我正试图从orderByChild()获取它,而不仅仅是一个简单的参考。只适用于将来找到这个“答案”的任何人-下面弗兰克的解决方案并没有解决这个问题,但我发现他对另一个问题的回答,他在回答--“Firebase API仅允许您使用其orderByChild和equalTo方法筛选一级深度(或已知路径)的子项。”您只需调用
toString()
在任何
数据库引用上,例如代码中的
snapshot.ref
。我添加了一个如何在查询结果上执行该操作的示例。嘿,弗兰克,感谢你的帮助,但它对我仍然不起作用。执行时,forEach不会启动。(我添加了一些console.log来检查它是否正在进入forEach)。是否有“最大限度“以这种方式嵌套和搜索数据的深度?如果我删除位置,取而代之的是嵌套城市:UID正下方的卡尔加里,它就会起作用。但不是UID/地点/城市:卡尔加里亚,我现在明白你的意思了。添加了关于如何按嵌套属性进行筛选的部分。如果您的问题不是集中在查找节点的路径上,它可能会更快地发现这一点。现在有意义了,感谢您的帮助!:)我来自SQL,所以学习这些东西要比平时花更长的时间,哈哈。再次感谢。
firebase.database().ref('users').orderByChild('location/city').equalTo('calgary')