当前位置: 首页 > 面试题库 >

Firebase .index在动态键上

卫烨烁
2023-03-14
问题内容

我已经开始测试Firebase,但我想不出关于索引的一件事。我正在根据所读内容(Firebase数据结构)创建一个结构,类似于带有用户和组的示例。JSON树如下所示:

{
  "babies" : {
    "-KQSVCXI-ZMz_lQ_Q906" : {
      "name" : "Baby",
      "parents" : {
        "F0o8Gr5GC2SrakUYZpC20efcmk63" : true
      }
    },
    "-KQSf4t9XQC3LnbsxLYS" : {
      "name" : "Name2",
      "parents" : {
        "S6aO6Dx4lgg6anW9S9hu7EJrhVg1" : true
      }
    }
  }
}

而且我正在努力为父母生小孩-就像Firebase示例中的组中的成员一样。我正在使用以下方法在iOS应用程序中执行此操作:

self.babiesReference
                .queryOrderedByChild("parents/\(user.uid)")
                .queryEqualToValue(true)
                .observeSingleEventOfType(.Value, withBlock: { (snapshot) in

                // Print value
                print(snapshot.value)

            }

user.uid当前用户的ID 在哪里。这可以正常工作,但唯一的问题仍然是:

使用未指定的索引。考虑在/ babies的安全规则中添加“ .indexOn”:“ parents /
S6aO6Dx4lgg6anW9S9hu7EJrhVg1”以提高性能

如何索引由用户ID呈现的“动态”子级?有办法吗?还是必须更改树结构?

谢谢。


问题答案:

对于这种类型的查询(通常,当您需要动态添加索引时),您可能需要设置一个反向索引。在您的情况下:

{
  "babies" : {
    "-KQSVCXI-ZMz_lQ_Q906" : {
      "name" : "Baby",
      "parents" : {
        "F0o8Gr5GC2SrakUYZpC20efcmk63" : true
      }
    },
    "-KQSf4t9XQC3LnbsxLYS" : {
      "name" : "Name2",
      "parents" : {
        "S6aO6Dx4lgg6anW9S9hu7EJrhVg1" : true
      }
    }
  },
  "parents": {
    "F0o8Gr5GC2SrakUYZpC20efcmk63": {
      "babies": {
        "-KQSVCXI-ZMz_lQ_Q906": true
      }
    },
    "S6aO6Dx4lgg6anW9S9hu7EJrhVg1": {
      "babies": {
        "-KQSf4t9XQC3LnbsxLYS": true
      }
    }
  }
}

这种双向链接在Firebase(以及许多类似的NoSQL数据库)中相当普遍。



 类似资料:
  • 我已经开始测试Firebase,我不知道关于索引的一件事。我正在根据我在Firebase上读到的内容创建一个结构--类似于用户和组的示例。JSON树如下所示: 谢了。

  • 问题内容: 我有一个像这样的字符串: 我把它变成一个数组: 该数组可以具有任意数量的元素,例如1、2、5等。 如何为多维数组分配一个特定的值,但是如何使用上面创建的I标识要插入的位置? 喜欢: 抱歉,这个问题令人困惑,但是我不知道如何更好地解释它 问题答案: 这是不平凡的,因为您想嵌套,但是应该这样:

  • 问题内容: 最新的()利用TypeScript 2.1中添加的功能,即。这是一件好事,因为现在的输入是正确的,因为在更新之前,“不知道”的输入是合并的,而不是替换它。 同样,使用使得功能在允许输入方面非常严格。无法再将未在组件定义中定义的属性添加到中(的第二个泛型)。 但是,也很难定义动态更新处理程序。例如: 该函数将引发以下错误 即使类型是。 我无法找到一个解决方案,比拥有一个单独的其他和功能。

  • 问题内容: 如果我有一个使用通用类型的类,例如 如果我知道使用的所有类型(例如本例中的情况),那么在设计时就可以直接键入所有内容: 如果从“我不知道类型”的“某处”获得对象列表会怎样?如何分配类型: 问题答案: Java泛型不是C ++模板。 Java泛型是编译时功能,而不是运行时功能。 这是Java泛型教程的链接。 这永远无法与Java一起使用: 您必须使用多态(例如,每个对象都实现一个已知的接

  • 问题内容: 我有以下代码片段: 我将如何使用上面的代码来设置每个键的状态。 这是初始状态: 问题答案: 基本规则是: 我们可以使用 计算属性名称 概念,并使用任何 js表达式 动态计算对象属性名称。为此,我们需要将表达式放在里面。 像这样: 解: 按照您发布的代码,你需要把里面,就像这样: 或者我们可以先创建该对象,然后将该对象传递给函数,如下所示: 另外,您不需要。您可以直接使用新值更新状态变量

  • 在jsdoc typedef中可以有动态键(道具名称)吗?我想象这会像下面的例子一样(这不起作用)。 传递typedef会使打字稿感到不安, “{bar: string; baz: number;}”类型的参数不能分配给“Foo”类型的参数。对象文字只能指定已知属性,“baz”在“foo”类型中不存在 输出: