node.js:遍历嵌套的firebase JSON树

我试图从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"); 

我已经检查了这些答案

如何使用Firebase / Node.js迭代大型数据集?

遍历嵌套的firebase对象 – Javascript

通过嵌套的JSON树遍历并更改值

但我相信根据我的上述代码应该工作,所以我很困惑。 另外,我试图用循环replace每个,但是我得到了

 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 

所以我几乎还有同样的问题。 我无法弄清楚我的例子与上面的解决scheme的链接有什么不同?

编辑:这是我的JSON树看起来像(根据弗兰克的要求)。 我只缩短了一些用户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 ] } } } } 

在您的第一个片段中: DatabaseReference只不过是Firebase数据库中某些数据的path。 数据本身不在ref中,所以你不能循环数据。

在第二个片段中很难说出什么问题,因为我们不知道/users下面的数据是什么样的。 请编辑您的问题,以包含JSON的最小片段(如文本,请勿截图),这是重现问题所必需的。 您可以通过点击Firebase数据库控制台中的“导出JSON”链接来获取此信息。

更新

如果您检索/users的值,您将获得所有用户的快照。 所以第一级的孩子是每个用户的节点。 然后在那里你有每个用户的饭菜。 你的代码缺less第一级的循环,所以:

 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推荐的数字索引。 有关数组和Firebase文档的处理集合的 信息,请参阅此博客文章 。