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

在Firebase中的AutoID下方进行查询

勾安翔
2023-03-14
问题内容
Results
- auto generated ID
  - auto generated ID
       value1: abc
       value2: def

我希望能够查询“ value2”等于某个特定值的位置。我从参考开始:

let ref = FIRDatabase.database().reference().child("Results")

由于我不知道自动生成的ID才能提供路径,因此我需要先获取它们才能确定可以使用的值.queryEqualToValue?如果是这样,我是否不仅要获取每条记录以查找值,还是要使用某种索引仅获取value2等于值的索引?

最后,我想查询一个返回value2等于某个值的所有“记录”的查询。感觉我需要遍历每条记录才能做到这一点。我觉得我在这里缺少什么。

更新:

我试过了:

self.ref.queryOrderedByKey().queryEqual(toValue: "def", childKey: "value2").observeSingleEvent(of: .value, with: {(snapshot) in
            print(snapshot) })

这会因我在下面的评论中给出的错误而崩溃。

我试过了:

self.ref.queryOrdered(byChild: "value2").queryEqual(toValue: "def").observeSingleEvent(of: .childAdded, with: {(snapshot) in

这永远不会执行关闭。如果我将观察者更改为".value"它,则返回null。

如果我这样做:

self.ref.queryOrdered(byChild: "value2").observeSingleEvent(of: .childAdded, with: {(snapshot) in

实际上,它将正确地对数据进行排序。".value"无论如何,它将无法正确排序,因此queryEqual如上所述无法进行添加。


问题答案:

Firebase数据库查询属性的深度比您运行它们的位置高一级。它们下不能包含动态路径。

由于您要从进行查询/Results,因此您可以根据对其属性进行排序/过滤/Results/$id/PropertyName

要允许对属性下的所有项目进行排序/过滤,/Results/$id1/$id2/PropertyName您需要更改/增强数据结构。例如:

ResultValues
   -auto_generated_ID1_auto_generated_ID2_value1
       value: abc
       path: "auto generated ID/auto generated ID"
   -auto_generated_ID1_auto_generated_ID2_value2
       value: def
       path: "auto generated ID/auto generated ID"

现在您可以查询:

ref.child("ResultValues")
   .queryOrderedByChild("value")
   .queryEqual(toValue: "def")
   .observeSingleEvent(of: .value, with: {(snapshot) in
            print(snapshot) })


 类似资料:
  • 由于我不知道为了提供路径而自动生成的ID是否需要首先获取它们,以便在下面找到可以使用的值?如果是这样,我是不是只是抓取每个记录来查找值,而不是使用某种索引来只抓取等于值的记录? 最后,我希望查询返回等于某个值的所有“记录”。感觉我需要遍历每一条记录才能做到这一点。我觉得我在这里错过了什么。 更新: 如果我这样做: 它实际上会正确地对数据进行排序。无论如何,它都不能正确地使用进行排序,添加则不能像上

  • 当我使用documentId作为字段路径从Firebase Firestore查询数据时,在Web页面(javascript)和Firebase函数(node.js)中运行脚本时,我会得到不同的行为。 给我一个错误: 错误:{错误:__name__上的筛选器必须是clientreadablestream._emitstatusIfdone(/user_code/node_modules/fireb

  • 问题内容: 如何在jDBI中执行类似的操作? 表: foo(id int,name varchar) 与myBatis中的@SelectProvider相似。 问题答案: 这应该工作: 不要忘记用以下方法注释包含此方法的类: 注解(因为JDBI底层使用Apache StringTemplate进行此类替换)。还要注意,使用此注释,您不能在SQL查询中使用’<’字符而不进行转义(因为它是String

  • 问题内容: 哪种是更好的Java编码风格? 要么: 问题答案: 当然是前者。后一种说法是多余的,只是表明您对布尔值的概念不太了解。 另一个建议:为变量选择其他名称。按照此Java样式指南: is前缀应用于布尔变量和方法。 ,,, , 这是Sun用于Java核心软件包的方法和变量的命名约定 。 使用前缀可以解决选择错误的布尔名称(如或)的常见问题。甚至 根本不合适,程序员被迫选择更有意义的名称。 变

  • 有些事情我想应该很容易,但我在网上搜索了很长时间后找不到答案: 我只是想使用graphql进行一次变异,然后再使用另一个graphql查询刷新数据,如何在一个HTTP(graphql)请求中实现这一点? 失败的尝试: 我尝试使用批处理发送包装在一个数组中的两个graphql模式,但它是异步的,查询会在不需要的变异之前返回 我试着用突变编写相同的查询,实际上什么都不突变,并把它放在真正的突变之后,这