我可以按如下方式检索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/