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

AJG*_*elt 4 javascript json node.js firebase firebase-realtime-database

我试图从node.js访问嵌套的firebase树,如下所示.

ref.forEach( function(snapshot0) {
    snapshot0.child("Meals").forEach( function(snapshot1) {                                                            
        console.log(snapshot1.val);
    });                         
});
Run Code Online (Sandbox Code Playgroud)

它总是会告诉我ref.forEach不是一个函数.

 TypeError: refPrices.forEach is not a function
Run Code Online (Sandbox Code Playgroud)

我已将这些定义如下.

var db        = admin.database();
var ref       = db.ref("users");
Run Code Online (Sandbox Code Playgroud)

我检查了这些答案

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

迭代嵌套的firebase对象 - Javascript

迭代嵌套的JSON树并更改值

但我相信根据那些我上面的代码应该工作,所以我真的很困惑.此外,我试图通过循环替换forEach,但我得到了

TypeError: ref.length is not a function
Run Code Online (Sandbox Code Playgroud)

所以我无法计算循环的最大值.我也试过了

ref.once("value", function(snapshot0) {
    snapshot0.child("Meals").forEach( function(snapshot1) {                                                            
        console.log(snapshot1.val);
    });                         
});
Run Code Online (Sandbox Code Playgroud)

但在这种情况下它会抛出错误

TypeError: snapshot0.forEach is not a function
Run Code Online (Sandbox Code Playgroud)

所以我几乎还有同样的问题.我无法解决我的例子与上述解决方案的链接不同的地方?

编辑:这是我的JSON树的样子(根据Frank的要求).我只略微缩短了userID.

"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 ]
            }
         }
    }
} 
Run Code Online (Sandbox Code Playgroud)

Fra*_*len 6

在您的第一个代码段中:a DatabaseReference只不过是Firebase数据库中某些数据的路径.数据本身不在ref中,因此您无法循环数据.

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

更新

如果检索值/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());
        });                         
    });
});
Run Code Online (Sandbox Code Playgroud)

另请注意,您使用的是Firebase建议的数字索引.请参阅有关阵列的此博客文章以及有关处理集合Firebase文档.