java - 从 Firebase 中的另一个键附加属性

标签 java android firebase firebase-realtime-database

我有一个定义如下的数据库 enter image description here

我可以按如下方式检索cafeList:

 ApiManager.getInstance().mainDB.child(CafeModel.DATASET_NAME)
                .orderByChild("name").startAt(searchText)
                .endAt(searchText + "\uf8ff")
                .addValueEventListener(new ValueEventListener()

但是我不确定如何附上特定咖啡馆也被我的用户设置为最喜欢的事实。

最佳答案

遗憾的是,在 Firebase 中无法仅使用单个查询来实现此目的。因此,在您的情况下,您应该查询数据库两次,一次获取咖啡馆列表,第二次检查这些咖啡馆对象之一是否是最喜欢的。但是,有一种解决方法,您可以在名为 favoriteCafe 的用户对象中创建一个新部分,在其中您可以添加所有用户最喜欢的咖啡馆,但这意味着重复数据。这种做法称为非规范化,是 Firebase 的常见做法。为了更好地理解,我建议您观看此视频,Denormalization is normal with the Firebase Database 。因此,在这种情况下,如果您想了解用户最喜欢的咖啡馆,您可以使用单个查询并在这个新创建的位置上附加一个监听器。

此外,当您复制数据时,需要记住一件事。就像添加数据一样,您也需要维护它。换句话说,如果你想更新/删除一个项目,你需要在它存在的每个地方都进行操作。

关于java - 从 Firebase 中的另一个键附加属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52576078/

相关文章:

android - Linux:启动 Android SDK 或 Android Emulator

android - 如何使用可下载的 APK(插件类)扩展应用程序

android - 正确的 Android 推荐调色板的十六进制代码

ios - 如何在 swift 4.0 中获取 firebase-realtime-database 中的特定值

firebase - 从Firebase中选择多个字段

java - 如何检查字符串是否以确切的字符串结尾?

java - JxBrowser更新浏览器

java - 增加数组大小,足够大以容纳另一个数组

java - 清除最近任务时防止杀死服务

javascript - 比较两个 +new 日期字符串