gpt4 book ai didi

swift - 通过 child 的 child 在 Firebase 中查询

转载 作者:搜寻专家 更新时间:2023-11-01 05:53:33 26 4
gpt4 key购买 nike

我在 Firebase 中的对象结构如下所示:

-KBP27k4iOTT2m873xSE
categories
Geography: true
Oceania: true
correctanswer: "Yaren (de facto)"
languages: "English"
question: "Nauru"
questiontype: "Text"
wronganswer1: "Majuro"
wronganswer2: "Mata-Utu"
wronganswer3: "Suva"

我试图按类别查找对象,例如,我想要类别设置为“大洋洲”的所有对象。

我正在使用 Swift,我似乎无法真正理解如何查询数据的概念。

我的查询现在看起来像这样:

ref.queryEqualToValue("", childKey: "categories").queryOrderedByChild("Oceania")

其中 ref 是该特定路径中对 Firebase 的引用。

但是无论我尝试过什么,我都会返回所有数据,而不是仅返回类别为大洋洲的对象。

我的数据结构如下:baseurl/questions/

正如您在对象示例中看到的那样,一个问题可以添加多个类别,因此据我所知,最好在对象中引用类别。

我可以将我的结构更改为 baseurl/questions/oceania/uniqueids/,但是这样我会得到多个包含相同数据但具有不同 uniqueid 的条目,因为该问题将出现在 oceaniageography 这两个类别下。

通过使用结构 baseurl/questions/oceania/baseurl/questions/geography 我也可以在 下添加 unique ids >oceaniageography 指向 baseurl/questions/uniqueids 中的特定 unique id,但这意味着我' d 必须跟踪很多引用资料。可以这么说,制作一个关系表。

我想知道这是要走的路还是?我应该重组我的数据吗?该应用程序尚未投入生产,因此可以完全重组数据而不会造成更大的后果,除了我必须重写我的代码,将数据推送到 Firebase。

让我知道,如果所有这些都没有意义并且对文字墙感到抱歉:-)

最佳答案

为 Tim 的回答添加一些额外的代码以供将来引用。

只需使用深度查询。父对象键不是查询的内容,因此它被“忽略”。它是由 autoId 生成的键还是恐龙名称并不重要 - 查询是针对子对象的,父对象(键)在 snapshot.key 中返回。

根据您的 Firebase 结构,这将检索 Oceania 为 true 的每个子节点,一次一个:

      let questionsRef = Firebase(url:"https://baseurl/questions")
questionsRef.queryOrderedByChild("categories/Oceania").queryEqualToValue(true)
.observeEventType(.ChildAdded, withBlock: { snapshot in
print(snapshot)
})

编辑:出现了关于一次加载所有值 (.value) 而不是一次加载一个值 (.childAdded) 的问题

      let questionsRef = Firebase(url:"https://baseurl/questions")
questionsRef.queryOrderedByChild("categories/Oceania").queryEqualToValue(true)
.observeSingleEventOfType(.Value, withBlock: { snapshot in
print(snapshot)
})

结果(我的 Firebase 结构有点不同,但你明白了)uid_1 没有 Oceania = true 所以它被从查询中省略了结果。

Snap (users) {
"uid_0" = {
categories = {
Oceania = 1;
};
email = "dude@thing.com";
"first_name" = Bill;
};
"uid_2" = {
categories = {
Oceania = 1;
};
"first_name" = Peter;
};
}

关于swift - 通过 child 的 child 在 Firebase 中查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37104945/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com