提问者:小点点

如何按日期排序Firebase文档引用的地图?


我正在尝试用Firebase Cloud构建一个小型聊天应用程序。 我在Firebase数据库中创建了以下结构:

Collection "users" -> bob@gmail.com document -> map of "chat rooms" field (type Map<String, DocumentReference>)
Collection chatRooms -> room id document -> Collection messages -> message id document -> fields

邮件id文档包含以下字段:

from: the user that sent the message
message: the text of the mesasage
sentAt: Date

我想创建一个当前用户的所有聊天室的回收视图。 所以我做的是:

FireDB.collection("users").document(connectedEmail).get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
    @Override
    public void onSuccess(DocumentSnapshot documentSnapshot) {
        Log.d(this.getClass().getName(), "addOnSuccessListener:success");
        if (!(documentSnapshot.exists())) {
            // TODO
            return;
        }
        Map<String, DocumentReference> chatRooms = (Map<String, DocumentReference>) documentSnapshot.get("chatRooms");
        if (chatRooms.isEmpty()) {
            // TODO
            return;
        }
    }
}).addOnFailureListener(new OnFailureListener() {

    @Override
    public void onFailure(@NonNull Exception e) {
        Log.d(this.getClass().getName(), "addOnSuccessListener:failed");
    }
});

到最后一条信息的日期去聊天室地图最简单的方法是什么? 我想在room id document级别中保留最近一次接触这个文档的时间,但是我想知道是否可以在不添加特殊支持的情况下使用Firebase。


共1个答案

匿名用户

是的,你必须更新聊天室的文档,每当一个消息被发送,Firebase Firestore不会自动添加时间戳到写入。

假设您在room文档中有字段“updated_at”(时间戳中的时间),那么每当在这个room中发送消息时,您只需用最新的时间戳更新它。 然后你可以按特定的顺序得到所有的房间。

为什么在时间戳中节省时间?