我的问题是关于查询Firebase云功能中的深层实时数据库。
我的数据库结构如下:
{
"sellers":
{
"s0": {
"customers":
{
"c0":
{
"name":"ABC",
"email":"abc@gmail.com",
"phone":"8899889988",
"products":
{
"123":
{
"productname":"WHIRLPOOL MACHINE",
"dop":"2018-07-03",
"period":"2"
},
"456":
{
"productname":"ONIDA OVEN",
"dop":"2018-07-04",
"period":"1"
}
}
}, .....and so on
现在,在我的云函数中,我编写了一段代码来获取customer(c0)每种产品的期限,就像这样:
exports.testQuery = functions.https.onRequest((req,res) => {
const dates = [];
ref.child("sellers/s0/customers/c0").once("value").then(snap => {
const childSnap = snap.val().products;
childSnap.forEach(grandSnap => {
const days = grandSnap.val().period;
dates.push(days);
});
return dates;
}).then(response => res.send(response))
.catch(error => res.send(error));
});
当我部署该功能时,我的期望值应该是:
[“ 2”,“ 1”]
它似乎不起作用,但是我认为我的逻辑是正确的。 我在网页上得到的输出是:
{}
请帮助!
此外, forEach() 方法是否不能为此操作嵌套在多个客户上并因此在多个卖家上使用?
答案 0 :(得分:0)
您的products
不是数组,因此没有forEach
。您还应该只加载products
,因为所有使用的都是:
const dates = [];
ref.child("sellers/s0/customers/c0/products").once("value").then(snap => {
snap.forEach(productSnap => {
const days = productSnap.val().period;
dates.push(days);
});
return dates;
}).then(response => res.send(response))