firebase - 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"] }
但是应用程序崩溃并要求我使用整个根。有什么建议么?
解决方案
索引(及其查询)在特定位置定义,然后索引(并排序)位于每个子节点下特定路径的值。您的子节点Utenti
没有Genere
属性,因此索引将为空。
要索引 JSON 屏幕截图中的属性,您需要这样的索引:
"Utenti": {
".indexOn": ["Books/codice0/Genere"]
}
使用此定义,每个子节点都Utenti
将按其Books/codice0/Genere
属性值在索引中。这也立即意味着您只能有一个 值Utenti
,因此您无法搜索多本书。
如果要搜索Utenti
所有书籍,则需要在数据结构中创建所有书籍的平面列表。Utenti
然后,您可以通过将Utenti
' 键作为属性存储在书中来将书与 a 相关联。
另见:
推荐阅读
- nestjs - 有推荐的更新 NestJS 的方法吗?
- r - R中的多边形函数在第一个点和最后一个点之间创建一条线
- python-3.x - Keras:“指定为模型输入的张量不是输入张量。” 如何正确地将输出张量转换为输入张量?
- php - mysqli 更新使用准备好的语句在 bind_para 失败
- c# - 在将相应列创建为 SelectionChanged 方法后立即修改特定行的单元格内容
- python - 从索引位置列表中创建非均匀(随机)间隔的范围?
- cursor - Sublime Text 3,当我双击/三次单击一个单词时,光标位于单词/行的开头
- angular - 如何在Angular Material中删除mat-pagination和mat-table之间的空格?
- vue.js - Vue:为数组属性设置默认值的最佳方法?
- python - 如何根据另一列python获取列的值