热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java–在firebase中使用随机密钥获取子节点数据的最佳方法?

这是一对多的关系:作者有很多书authors:randomAuthorId1:authorId:aut

这是一对多的关系:作者有很多书

authors:
randomAuthorId1:
authorId:
authorName:
randomAuthorId2:
authorID:
authorName:
books:
randomAuthorId1:
randomBookId1:
bookId:
bookName:
randomBookId2:
bookId:
bookName:
randomAuthorId2:
randomBookId3:
bookId:
bookName:

在我的情况下,我没有“randomAuthorId1”,但我有“randomBookId2”,这是我获取randomBookId2节点值的代码:

DatabaseReference bookRef = FirebaseDatabase.getInstance().getReference("books");
bookRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot data : dataSnapshot.getChildren()) {
if (data.hasChild("randomBookId2")) {Book book = data.child("randomBookId2").getValue(Book.class);
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});

因此,它必须遍历所有子节点才能获得randomBookId2的节点.有没有更好的办法?
谢谢大家

解决方法:

您可以使用Query执行此操作,但使用查询需要更新您的Books DB,如下所示.
图书:

randomAuthorId1:
randomBookId1:
bookId:
randomBookId:randomBookId1
bookName:
randomBookId2:
bookId:
randomBookId:randomBookId2
bookName:
randomAuthorId2:
randomBookId3:
bookId:
randomBookId:randomBookId3
bookName:

此后,您可以像下面一样触发查询

Query queryToGetData = databaseReference.child("books")
.orderByChild("randomBookId").equalTo("randomBookId2");
queryToGetData.addChildEventListener(new ChildEventListener() {
// TODO:
// ...
});

它会对你有所帮助.


推荐阅读
author-avatar
财珍文纶1
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有