如何检查Firebase中是不是存在具有多个字段的节点(子)?
Posted
技术标签:
【中文标题】如何检查Firebase中是不是存在具有多个字段的节点(子)?【英文标题】:How to check if a node(child) with multiple fields exist in Firebase?如何检查Firebase中是否存在具有多个字段的节点(子)? 【发布时间】:2015-12-28 06:18:50 【问题描述】:This 显示了一种检查具有给定 id 的节点是否存在的方法。 但是,我正在使用带有随机 id 的 push 方法插入一个节点。 假设节点具有字段 A、B 和 C。 在插入 A = a1、B = b1、C = c1 的节点之前。我想检查是否存在具有此组合的节点。
【问题讨论】:
【参考方案1】:您可以随时阅读并检查属性:
function checkData(data)
return data.A === 'a1' && data.B === 'b1' && data.C === 'c1';
var ref = new Firebase('<my-firebase-app>/item');
ref.once('value', function(snap)
var hasCombination = checkData(snap.val());
);
但您也可以编写安全规则,使该组合永远存在。使用安全规则编译器 Bolt 可以更轻松地完成此操作,因为 Bolt 允许您将类型映射到路径。
type Data
a: String;
b: String;
c: String;
path /data is Data;
此代码生成一组验证规则,确保将仅具有 A
、B
和 C
的 String
属性的对象保存到 /data
路径。
【讨论】:
感谢您的回复。您提供的功能会检查所有节点吗?我的意思是项目可以有 10 个具有随机 id 的孩子,这 10 个孩子中的每一个都有字段 A、B 和 C。在插入第 11 个孩子之前(A = a1,B = b1 , C = c1) 我需要确保前 10 个都没有这个。我需要遍历所有 10 个吗?还是您提供的功能会自行完成?如果是,请说明它是如何做到的?【参考方案2】:正如大卫的回答中所写,我们可以阅读和检查。但是他没有提到我们何时要检查多个子节点。 forEach 方法在这种情况下会有所帮助。所以我们可以使用 forEach 为每个 chlid 应用 David 的解决方案。
【讨论】:
以上是关于如何检查Firebase中是不是存在具有多个字段的节点(子)?的主要内容,如果未能解决你的问题,请参考以下文章
Flutter & Firebase:如何检查某个项目是不是存在于 Firebase 文档中的数组中