javascript - 无法通过键找到 firebase 子项

标签 javascript reactjs firebase firebase-realtime-database

仅当我指定对象的完整路径时,我才能通过指定特定子键来查找 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()

最佳答案

我不确定您还希望它如何工作? 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);

虽然我怀疑第二种方法效率较低,但我不确定。

关于javascript - 无法通过键找到 firebase 子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45245891/

相关文章:

javascript - 使用css将标题分成jquery中的列

javascript - D3.js "exporting"数据

javascript - 使用带有 Cookie 的 AngularJS 制作 CORS

javascript - React Component onClick 根据 Prop 类型做一些事情

javascript - Firebase 的云函数获取 key 值

java - 如何查询 Firebase 文档中的数组列表?

javascript - 使用 Dropzone 通过 Node multer 上传多个文件时出现 LIMIT_UNEXPECTED_FILE 问题

android - 当 ESLint 发出错误时如何使 React Native 项目中的构建失败

ios - 如何从新的 Firebase 存储下载和查看图像?

javascript - 在我的示例中,如何将状态从一个组件解析到另一个组件?