首页 > 解决方案 > Firebase 实时数据库 EqualTo 索引规则 Xamarin 表单

问题描述

我在 Visual Studio 上做一个 Xamarin Forms 多平台应用程序。我使用 Firebase 实时数据库,并创建了一个这样的嵌套表

在此处输入图像描述

我需要创建一个列表视图,我可以在其中查看用户阅读的按类型过滤的每一本书。

return (await firebase
              .Child("Utenti")
              .Child(ID)
              .Child("Books")
              .OrderBy("Genere")
              .EqualTo("Gialli")
              .OnceAsync<Utente>()).Select(item => new Utente
              {

              }).ToList();

问题是我必须更新实时数据库的规则并添加 indexOn Genere 才能使用 EqualTo。但是 ID 总是在变化,因为它是用户的 UID。

我试过了

"Utenti": {
".indexOn": ["Genere"] }

但是应用程序崩溃并要求我使用整个根。有什么建议么?

标签: firebasefirebase-realtime-databasexamarin.formsfirebase-security

解决方案


索引(及其查询)在特定位置定义,然后索引(并排序)位于每个子节点下特定路径的值。您的子节点Utenti没有Genere属性,因此索引将为空。

要索引 JSON 屏幕截图中的属性,您需要这样的索引:

"Utenti": {
  ".indexOn": ["Books/codice0/Genere"] 
}

使用此定义,每个子节点都Utenti将按其Books/codice0/Genere属性值在索引中。这也立即意味着您只能有一个 值Utenti,因此您无法搜索多本书。

如果要搜索Utenti所有书籍,则需要在数据结构中创建所有书籍的平面列表。Utenti然后,您可以通过将Utenti' 键作为属性存储在书中来将书与 a 相关联。

另见:


推荐阅读