【发布时间】:2018-12-14 19:24:32
【问题描述】:
我的问题是关于在 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
现在,在我的云函数中,我写了一段代码来获取客户(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() 方法不能嵌套在对多个客户和多个卖家进行此操作吗?
【问题讨论】:
-
这可能是使用 no-sql 数据库时最大的问题之一。浏览深度文档最终可能会成为一场噩梦。您只能在类似项目的数组中使用 forEach,您可能希望对每个级别使用 Object.keys(doc).forEach(key => //do stuff ) 等等。
-
@CristianS。你好!我知道了。但是我如何在一个对象中获取整个对象呢?通过使用 Object.keys(obj) 我们只能以数组格式获取该引用对象的键。
-
那么您遍历键并且您仍然拥有对象本身,不是吗?你只需要做 Object.keys(doc).forEach(key => doc[key] // doc.key 是对象属性)
-
@CristianS。它有帮助!太感谢了! :) 干杯
标签: javascript node.js firebase google-cloud-functions