当前位置: 首页 > 知识库问答 >
问题:

存储在子集合中的fiRecovery数据

狄令
2023-03-14

我正在Firestore中制作一个“聊天演示”来保存信息,我是这样做的:

FirebaseFirestore.getInstance()
    .collection(Consts.R_CHAT_ROOM)
    .document(finalChatRoom)
    .collection("messages")
    .document(currentTime)
    .set(chatModel);

但问题是,finalChatRoom文档显示它不存在,尽管它包含一个子集合

正如上面写的:“这个文档不存在”,尽管它包含一个名为messages的子集合,其中包含更多文档。

但是我需要检查带有特定名称的文档是否存在于聊天室消息集合下。

我的代码是否有任何问题,或者我是否需要以其他方式进行?

提前谢谢。

共有1个答案

岳嘉容
2023-03-14

在不存在的文档中创建子集合很像创建一个具有子集合的文档,然后删除该文档。从数据模型留档的子集合部分这意味着:

删除具有关联子集合的文档时,不会删除子集合。它们仍然可以通过引用访问。例如,db可能引用了一个文档。集合(“coll”)。doc(“doc”)。集合(“子集合”)。文档('subdoc')即使文档被db引用。集合(“coll”)。doc('doc')不再存在。

如果希望文档存在,我建议首先创建finalChatRoom文档,至少包含一个字段,然后在其下方创建子集合。例如:

DocumentReference chatRoomDocument = FirebaseFirestore.getInstance()
        .collection(Consts.R_CHAT_ROOM)
        .document(finalChatRoom);

// Create the chat room document
ChatRoom chatRoomModel = new ChatRoom("Chat Room 1");
chatRoomDocument.set(chatRoomModel);

// Create the messages subcollection with a new document
chatRoomDocument.collection("messages")
        .document(currentTime).set(chatModel);

其中,聊天室类类似于:

public class ChatRoom {
    private String name;

    public ChatRoom() {}

    public ChatRoom(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    // ...
}

这是利用Firestore的自定义对象功能。如果您不想在这个阶段使用自定义对象,您可以创建一个简单的映射来表示聊天室:

Map<String, Object> chatRoomModel = new HashMap<>();
chatRoomModel.put("name", "Chat Room 1");

 类似资料:
  • 我目前正在Android Studio中开发Java租车应用程序。对于项目数据库,我正在使用Cloud FiRecovery。我的数据库结构如下: 第一张图像由多个随机ID文档(每个文档代表一辆车)组成的汽车集合表示。每辆车都有一个唯一的子集合,名为bookings,它保存在随机ID文档中,详细介绍了对该特定车进行的预订(第二个图像由一个booking子集合的示例表示)。 我目前在“预订历史记录”

  • 我正在尝试将以下结构从实时数据库迁移到Firestore: 因此,在根节点“资源”下,我有一些包含资源项列表的子节点(SENT、ACCEPT、REFUSED、...)。 使用Firestore,我似乎无法将subCollection直接置于collection之下(当我试图在管理控制台中使用Firestore复制此结构时,我需要创建一个中间文档,如: 女巫通向那个结构: 因此子节点“SENT”被复

  • 我被android firstore文档和子集合弄糊涂了。 此示例将生成以下数据结构: 代码如下: 子集合和文档节点交替显示:a、c与b、d。 但是如何在没有d节点的情况下实现类似的数据结构(如下所示): 自。add方法仅适用于document而不适用于collection,我们不能只删除d(document),因为c(collection)没有add方法。 我应该如何修改我的代码?

  • 我的云Firestore数据库中有以下规则: 这个想法是,如果你拥有一个性能,你可以读写它;如果你登录,你可以创建一个性能。 此查询工作正常: 但是,如果我想获取'场景'子集合的内容,我会收到一个错误:"com.google.firebase.firestore.FirebaseFirestoreException:PERMISSION_DENIED:缺少或权限不足。"这是与以下查询: 我假设我需

  • 我是《颤栗》和《火种》的新手。 我有一个名为“菜肴”的集合,其中我有许多文档(例如名称、描述等),我还有一个名为成分的子集合,其中我有作为文档的id、名称和数量。 我要做的是取回所有含有配料的菜肴。 我有一个模型 IngredientModel模型 DishHelper 餐具供应商 主要我写了 和在家中(在构建方法中) 但是如果我尝试打印<code>打印(dishProvider.disks)我获

  • 我们在Google Firestore中有一个收藏。 我们是否可以在一条语句中添加一个包含数据的文档和此新文档下的子集合?