如何检查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;

此代码生成一组验证规则,确保将仅具有 ABCString 属性的对象保存到 /data 路径。

【讨论】:

感谢您的回复。您提供的功能会检查所有节点吗?我的意思是项目可以有 10 个具有随机 id 的孩子,这 10 个孩子中的每一个都有字段 A、B 和 C。在插入第 11 个孩子之前(A = a1,B = b1 , C = c1) 我需要确保前 10 个都没有这个。我需要遍历所有 10 个吗?还是您提供的功能会自行完成?如果是,请说明它是如何做到的?【参考方案2】:

正如大卫的回答中所写,我们可以阅读和检查。但是他没有提到我们何时要检查多个子节点。 forEach 方法在这种情况下会有所帮助。所以我们可以使用 forEach 为每个 chlid 应用 David 的解决方案。

【讨论】:

以上是关于如何检查Firebase中是不是存在具有多个字段的节点(子)?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查文件是不是存在于 Firebase 存储中?

Flutter & Firebase:如何检查某个项目是不是存在于 Firebase 文档中的数组中

如何检查用户是不是存在于 Firebase 中?

Google firebase 检查孩子是不是存在

如何使用angularfire2检查孩子是不是存在于firebase列表中

如何使用 SQL 检查记录是不是存在?