javascript - Firebase 理解 snapshot.child()

标签 javascript firebase firebase-security firebase-realtime-database

考虑 Firebase 快速入门指南 (here) 中引用的这个数据结构

{"name": {"first": "Fred","last": "Flintstone"}

文档说可以使用以下方法访问从查询返回的“name”的每个子对象的数据快照位置:

var ref = new Firebase("https://docs-examples.firebaseio.com/samplechat/users/fred");
ref.once("value", function(snapshot) {
     var nameSnapshot = snapshot.child("name");
     var name = nameSnapshot.val();

     name === { first: "Fred", last: "Flintstone"}

     var firstNameSnapshot = snapshot.child("name/first");
     var firstName = firstNameSnapshot.val();
     firstName === "Fred"

     var lastNameSnapshot = snapshot.child("name").child("last");
     var lastName = lastNameSnapshot.val();
     lastName === "Flintstone"

     var ageSnapshot = snapshot.child("age");
     var age = ageSnapshot.val();
     age === null (because there is no "age" child in the data snapshot)
});

但是当处理以下行时,这有点奇怪。

var nameSnapshot = snapshot.child("name");
var name = nameSnapshot.val();

name.firstname.last 也被检索。那么为什么要使用这种快照方法“child()”呢?或者更确切地说,什么时候使用此方法会有好处,因为当您拉动父对象时,Firebase 会拉动所有子对象,或者是否有一种方法可以检索父节点/对象而不拉动其中的一些子对象?那么这个方法对我来说就有意义了。

任何信息将不胜感激!谢谢

最佳答案

is there a way to retrieve a parent node/object without pulling some of it's children?

Firebase JavaScript API 始终检索完整的节点。所以:不,JavaScript API 中没有办法获得浅表结果/

why would one use this snapshot method child()?

如果我们比较 snapshot.child("property")snapshot.val().propertyDataSnapshot.child() 方法返回一个DataSnapshot,您可以从中再次获取一个refval() 方法将快照的值反序列化为 JSON。因此,如果您需要,则必须构建自己的 ref。但是每个的值(value)在很大程度上取决于您的用例,所以“为什么”不是我可以为您回答的问题。

关于javascript - Firebase 理解 snapshot.child(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31144859/

相关文章:

javascript - 解构数组并在一行中分配给属性对象

firebase - doc.data() 在 Firebase 中的作用是什么?

java - 无法从 Firebase 读取数据 - Firebase 数据库错误 : Permission denied

javascript - 动态值的 Firebase indexOn 警告

c# - 在 JavaScript/Jquery/NodeJS 中创建类似 C# 的 List

javascript - 我正在阅读 Eloquent Javascript,我对这个部分函数示例有点困惑。请帮忙解释一下

javascript - 如何在纯 JavaScript 中检测 mousein 和 mouseleave?

java - com.google.firebase.database.DatabaseException : Expected a List while deserializing, 但得到了一个类 java.util.HashMap

android - Play 服务的 Firebase 低于 9

firebase - Firestore 安全规则 - 权限被拒绝