android - Firebase Firestore 使用不同的字段 android 获取或查询
问题描述
如何获取不同字段的文档值?例如,我有一个带有 Message 的数据库,我将所有聊天数据存储在这个集合中。现在我想获取两个用户之间的所有聊天数据,按时间戳排序。
据我所知, firebase也引入了in
操作符,但它是针对单场
Firestore 快照的。
代码片段:
db.collection("Message")
.whereEqualTo("from",mAuth.getCurrentUser().getUid()) //to is receiver UID
.whereEqualTo("to",to)
|| // Or "I need or in between"
.whereEqualTo("to",mAuth.getCurrentUser().getUid())
.whereEqualTo("from",to)
.orderBy("time_stamp", Query.Direction.ASCENDING)....
简而言之,我需要在两个字段条件之间或两者之间获取数据库。
预期输出:
从firestore获取登录用户和接收者之间的所有文档。(获取来自登录和接收者ID或来自接收者和登录用户的数据)。
我是初学者,请帮助我解决此问题,否则任何解决方法都可以。谢谢
解决方案
首先获取所有具有的文档,"from"==mAuth.getCurrentUser().getUid
然后过滤掉具有"to"==to
. 这是代码:
db.collection("Message")
.whereEqualTo("from",mAuth.getCurrentUser().getUid)
.orderBy("time_stamp", Query.Direction.ASCENDING)
.get()
.addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
List<DocumentSnapshot> allDocs = queryDocumentSnapshots.getDocuments();
List<DocumentSnapshot> requiredList = new ArrayList<>();
for(DocumentSnapshot d : allDocs){
if(/*Cast into required type.I'm assuming string*/((String)d.get("to")).equalsIgnoreCase(to)){
requiredList.add(d);
}
}
// requiredList contains the required documents
// do whatever you want here...
}
});
如有必要,索引数据库。您可以检查任何所需索引的日志。
推荐阅读
- json - 在 Swagger UI 中美化 Json 响应
- sql - 在 Oracle 数据库中更改用户配置文件
- python - 绘制每日级别数据,但仅使用月级别标签
- python - Selenium 在按钮单击后不显示表格内容
- excel - Excel 中的 TODAY 函数,自动更新
- sql - SQL转换:多行到一行
- c - SDL 2 C 编译器标志
- excel - 使用 textjoin 删除重复项并包含条件
- c - C程序在Linux命令行中导致分段错误,但在gdb中正常退出
- slack - 关于 [@slack/bolt] 包的问题,用于配置 Redistribution 以使多个工作区可用