【问题标题】:Firebase Realtime Database EqualTo Index Rules Xamarin FormsFirebase 实时数据库 EqualTo 索引规则 Xamarin 表单
【发布时间】:2021-02-17 17:53:43
【问题描述】:

我正在 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"] }

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

【问题讨论】:

  • 您可以查看this 看看它是否对您有帮助。

标签: firebase firebase-realtime-database xamarin.forms firebase-security


【解决方案1】:

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

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

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

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

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

另见:

【讨论】:

  • 感谢您的回答!问题是,codice0 总是在变化,就像用户的 ID 一样。我打算将书的密钥存储为用户的属性,但我在获取数据时遇到了问题,所以我现在只是在尝试,顺便谢谢你!
猜你喜欢
  • 2021-01-31
  • 1970-01-01
  • 1970-01-01
  • 2020-08-08
  • 2020-02-16
相关资源
最近更新 更多