我无法通过指定特定子键来找到firebase对象,并且只有在指定对象的整个路径时才能找到它。这是为什么?
这有效
ref.child(`users/${user.uid}/watchlist/${key}`)
.once('value')
.then(function(snapshot) {
console.log(snapshot.val());
});
这不起作用
ref.child(key)
.once('value')
.then(function(snapshot) {
console.log(snapshot.val());
});
我的firebase连接
export const ref = firebase.database().ref()
答案 0 :(得分:1)
我不确定你还有什么期望它能起作用? child()
is not a "search" function,它只查看您指定的引用或子路径的直接子项。它没有通过嵌套路径查看Firebase结构"搜索"对于指定的密钥。那将是非常低效的。即使做了这样做,如果有多个匹配键会发生什么?它会归还所有这些吗?如果他们在不同的深度怎么办?等
Firebase实时数据库基本上是一个类似JSON的大数据树。获取所需数据的唯一方法是了解该数据的完整路径。否则就不会有任何结构。
我想如果您愿意,可以加载整个Firebase数据结构,然后编写自己的函数来查找任意键,无论它们在树中的哪个位置。但是,它存在同样的问题效率低下,就好像它是内置在Firebase库中的那样 - 但事实并非如此。
也许这会更好地说明child()
的工作原理。这样:
ref.child(`users/${user.uid}/watchlist/${key}`);
与此基本相同:
ref.child("users").child(user.uid).child("watchlist").child(key);
虽然我怀疑第二种方法效率较低,但我不确定。