是否可以使用 orderByChild .equalTo 从 firebase 查询中检索子节点的完整路径?我有 .indexOn: "city"
我的数据结构如下:
我试过:
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/