【发布时间】:2017-05-24 02:10:55
【问题描述】:
我有这样的数据:
"customers": {
"aHh4OTQ2NTlAa2xvYXAuY29t": {
"customerId": "xxx",
"name": "yyy",
"subscription": "zzz"
}
}
我需要通过 customerId 检索客户。由于路径限制,父键只是 B64 编码的邮件地址。通常我通过这个电子邮件地址查询数据,但有几次我只知道 customerId。我试过这个:
getCustomersRef()
.orderByChild('customerId')
.equalTo(customerId)
.limitToFirst(1)
.once('child_added', cb);
如果客户确实存在,这很有效。在相反的情况下,永远不会调用回调。
我尝试了value 事件,该事件有效,但这给了我以编码电子邮件地址开头的整个树,因此我无法访问内部的实际数据。或者我可以吗?
我找到了这个答案Test if a data exist in Firebase,但这再次假设你我知道所有路径元素。
getCustomersRef().once('value', (snapshot) => {
snapshot.hasChild(`customerId/${customerId}`);
});
我还能在这里做什么?
更新
我想我找到了解决方案,但感觉不对。
let found = null;
snapshot.forEach((childSnapshot) => {
found = childSnapshot.val();
});
return found;
【问题讨论】:
-
另外this的回答可能对你有帮助
-
你能澄清一下这个问题吗?它声明您要“在父键未知时检索子记录”。这就是 firebase 查询的作用——它“查看”一组节点以查看其中是否有任何一个与您指定的数据匹配的子节点——不需要指定父节点,只需指定作为父节点的节点包含您要查找的子节点的节点。
标签: javascript firebase