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

标签 javascript firebase firebase-realtime-database

是否可以使用 orderByChild .equalTo 从 firebase 查询中检索子节点的完整路径?我有 .indexOn: "city"

我的数据结构如下:

firebase structure

我试过:

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.

如何获得完整路径 - 从找到的 key 开始? 预期:/users/uid/location/

最佳答案

要获取数据的完整限定 URL,您可以调用 DatabaseReference.toString() .

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

snapshot.ref.toString().substring(snapshot.ref.root.toString().length - 1)

另见:how to get firebase.database.Reference full path ,我会将您的问题标记为重复问题。


由于您对 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() 中使用:

firebase.database().ref('users').orderByChild('location/city').equalTo('calgary')

关于javascript - 如何使用 orderByChild equalTo 检索子节点的完整路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58045946/

相关文章:

android - 如何使用 Android FirebaseUI 从 Firebase 进行分页查询

ios - 当 userID 改变时处理 Firebase 观察者?

javascript - 为什么我的过滤器没有按预期工作?

angularjs - 如何运行 Firebase 和 Angularjs Promises,例如 $loaded(),然后从依赖函数获取值

firebase - 分析 Firebase 数据

android - 由于 Firebase 规则不是过滤器,那么我们如何过滤呢?

swift - iOS 火力地堡 : Retrieve and match database code to pass through authentication

javascript - DataTable 重新加载后,大多数函数返回 null

javascript - 将数据放入对象中

javascript - 在 javascript/node.js 中迭代对象数组的有效方法