考虑在Firebase快速启动指南(这里)上引用的这个数据结构
{"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.first和name.last。那么,为什么要使用这个快照方法“子()”呢?或者更确切地说,什么时候使用此方法是有益的,因为当您拉出父对象时,Firebase会拉出所有的子对象,或者是否有一种方法可以检索父节点/对象而不提取其子节点/对象?那么这个方法对我来说是有意义的。
如有任何信息,我们将不胜感激!谢谢
发布于 2015-06-30 18:09:35
是否有一种方法可以检索父节点/对象而不拉它的一些子节点/对象?
Firebase JavaScript API总是检索完整的节点。所以:不,在JavaScript API中没有一种方法可以得到一个浅显的结果/
为什么要使用这种快照方法
child()?
如果我们把snapshot.child("property")和snapshot.val().property做比较的话。DataSnapshot.child()方法返回一个DataSnapshot,您可以从它获得一个ref。val()方法将快照的值反序列化为JSON。所以,如果你需要的话,你必须建立你自己的裁判。但是它们的价值在很大程度上取决于您的用例,所以“为什么”不是我可以回答的问题。
发布于 2015-06-30 19:31:30
快照是调用时节点中所有内容的确切图片。但是,它包含的内容将根据获取快照的方式而有所不同。
指南中提供的例子是稍微一维的.通常,您不会有一个名为name的节点,只列出一个人。
一个更好的例子是一个名为users的节点,其数据是这样的。
users
user_id_0
firstName:
lastName:
age:
user_id_1
firstName:
lastName:
age:当与Value参数一起使用时,users节点的快照包含节点的所有子节点和每个子节点内的所有数据(在本例中是所有用户及其数据),处理该子节点的块被调用一次。例如,我们使用它读取用户节点中的所有用户,然后遍历用户以获取某些特定数据。我们还使用它进行多参数查询,这些查询不受firebase的直接支持.例如,我们想让所有20岁的用户都叫Elmo。
Add参数每次读取每个子块,对子块调用一次,在本例中为每个用户。通常我们使用它来保持UI tableView的更新(ObjC),因此当一个新的子数据被添加到Firebase时,所有观察的应用程序都会被通知,这样我们就可以更新UI表了。
如果不检索子对象,则无法检索父对象。但是,如果您正在寻找特定的数据块,则如果您知道父对象,则可以直接访问子对象。这样您就可以检索用户/user_id_0/age
https://stackoverflow.com/questions/31144859
复制相似问题