我正在尝试从node.js访问嵌套的firebase树,如下所示。
ref.forEach( function(snapshot0) {
snapshot0.child("Meals").forEach( function(snapshot1) {
console.log(snapshot1.val);
});
});
它总是告诉我ref.forEach不是一个函数。
TypeError: refPrices.forEach is not a function
我已将这些定义如下。
var db = admin.database();
var ref = db.ref("users");
我检查了这些答案
How do I iterate through a large dataset with Firebase / Node.js?
Iterating through nested firebase objects - Javascript
Iterate through nested JSON tree and change values
但我相信根据那些我上面的代码应该正常工作,所以我真的很困惑。此外,我试图通过循环替换forEach,但我得到了
TypeError: ref.length is not a function
所以我无法计算循环的最大值。我也试过
ref.once("value", function(snapshot0) {
snapshot0.child("Meals").forEach( function(snapshot1) {
console.log(snapshot1.val);
});
});
但在这种情况下它会抛出错误
TypeError: snapshot0.forEach is not a function
所以我几乎还有同样的问题。我无法确定我的示例与上述解决方案的链接有何不同?
编辑:这是我的JSON树的样子(根据Frank的要求)。我只是略微缩短了用户ID。
"users" : {
"ugkvjTuXW2" : {
"Meals" : {
"Meal_2" : {
"priceHist" : [ null, 1, 1, 1, 1, 1, 1 ]
},
"Meal_3" : {
"priceHist" : [ null, 1, 1, 1, 1, 10, 1 ]
},
"Meal_4" : {
"priceHist" : [ null, 1, 1, 1, 1, 1, 1 ]
},
"Meal_5" : {
"priceHist" : [ null, 1, 1, 1, 1, 1, 1 ]
}
}
},
"oJJ1Cojia2" : {
"Meals" : {
"Meal_2" : {
"priceHist" : [ null, 1, 4, 4, 1, 1, 1 ]
},
"Meal_3" : {
"priceHist" : [ null, 1, 1, 1, 1, 10, 1 ]
},
"Meal_4" : {
"priceHist" : [ null, 1, 5, 1, 1, 7, 1 ]
},
"Meal_5" : {
"priceHist" : [ null, 3, 1, 1, 1, 12, 1 ]
}
}
}
}
答案 0 :(得分:6)
在您的第一个代码段上:DatabaseReference
只不过是Firebase数据库中某些数据的路径。数据本身不在ref中,因此您无法循环数据。
很难说出你的第二段代码中出了什么问题,因为我们不知道/users
下的数据是什么样的。请编辑您的问题,以包含重现问题所需的JSON最小片段(如文本,请不要截图)。您可以通过单击"导出JSON"来实现此目的。您Firebase Database console中的链接。
<强>更新强>
如果您检索/users
的值,则会获得所有用户的快照。所以第一级孩子是每个用户的节点。然后在那里你有每个用户的饭菜。您的代码缺少第一级的循环,因此:
var ref = admin.database().ref("users");
ref.once("value", function(userSnapshot) {
userSnapshot.forEach(function(userSnapshot) {
userSnapshot.child("Meals").forEach(function(mealSnapshot) {
console.log(mealSnapshot.val());
});
});
});
另请注意,您使用的是Firebase建议的数字索引。请参阅this blog post on arrays和Firebase documentation on handling collections。