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

云还原 - 文档命名问题

冯沛
2023-03-14

我很难实现正确的云Firestore文档命名。

我有一个拥有5000多张照片的网络存储服务器。照片命名为1.jpg-

html" target="_blank">示例:该应用程序将显示来自服务器的随机照片(例如123.jpg)。用户将能够对该照片发表评论并回复其他评论。

目前唯一有效的方法是这样命名文档:“photo_1”-

不要使用单调增加的文档ID,例如:•客户1、客户2、客户3、…•产品1、产品2、产品3…这样的顺序ID可能会导致影响延迟的热点。

什么有效:

  • 照片(收藏)
  • Photo_1(文档)
  • Photo_comments(收藏)
  • 无人识别代码(文档)

//Android系统

int currentPhotoNumber = 13;
firebaseFirestore.collection("photos").whereEqualTo("photo_id", currentPhotoNumber).get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
    @Override
    public void onComplete(@NonNull Task<QuerySnapshot> task) {

        if (task.isSuccessful()) {
            QuerySnapshot snapshot = task.getResult();
            if (!snapshot.isEmpty()) {
                // Document with the photo_id of "currentPhotoNumber" already exists
            } else {

                // Document does not exist. We need to create one.
                Map<String, Object> data = new HashMap<>();
                data.put("photo_id", currentPhotoNumber);

                // Create a new document named photo_13
                firebaseFirestore.collection("photos").document("photo_" + currentPhotoNumber).set(data);
            }
        }

        // Add a comment to photo_13
        for (QueryDocumentSnapshot document : task.getResult()) {
            DocumentReference documentReference = document.getReference();
            documentReference.collection("photos").get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                @Override
                public void onComplete(@NonNull Task<QuerySnapshot> task) {

                    Map<String, Object> data = new HashMap<>();
                    data.put("author", "Name");
                    data.put("author_id", "1234");
                    data.put("comment", "This is a comment for photo 13");
                    data.put("time", FieldValue.serverTimestamp());

                    documentReference.collection("photo_comments").add(data);
                }
            });
        }
    }
});

它的工作原理,如果我用UUID创建文档,并设置字段“photo_id”与当前照片号,但它变得混乱,如果很多用户发表评论在同一时间,如果photo_id没有设置为特定的照片,因为它创建多个文档具有相同的字段和值(例如photo_id=13)。我如何防止文档重复具有相同的字段值?

共有1个答案

秦城
2023-03-14

最简单的解决方案是使用收集引用#add()方法,该方法:

将具有指定数据的新文档添加到此集合,并自动为其分配文档ID。

也就是说,要识别照片,只需在文档中添加一个名为imageName的字段,该字段将保存实际的图像名称»photo_1«-

 类似资料:
  • 我有一个firebase云函数(http请求),我想在其中更新firestore数据库中的文档 函数正在部署,正确,但每当我调用它不再打印任何内容。评论该部分打印“promise已解决”,我觉得我无法访问或使用错误的语法访问Firestore db,但我不明白为什么? Firebase日志正在打印: 函数执行开始 tr_。。。。。。。。(id) db调用前测试 函数执行耗时1103毫秒,完成状态代

  • 我有非常大的 cosmos-db 集合,我想重命名这个集合的一些属性,我发现我可以实现 C# 应用程序,它在集合文档上循环,并替换它们每个文档的文档,但是根据集合大小,这个解决方案将花费很长时间。Azure 门户上是否有任何其他解决方案(函数或存储过程)或 SDK,它们将以更少的时间为我们提供相同的功能? 例子: 旧文档{代码,CName,CAddress } 我想将属性重命名为{Customer

  • 云联壹云,新一代产品化融合云,一个平台管理企业本地IDC、私有云、公有云等异构IT资源,整体提高企业IT基础设施的管理效率。

  • 我有以下场景:使用firebase Auth对用户进行匿名身份验证。然后,他用电子邮件和密码登录到一个现有的账户。然后,他再次从账户中注销。现在,我想重新创建他以前使用过的匿名帐户。 是否可以在设备上本地存储匿名凭据,并在以后再次登录匿名帐户时使用它们?我想保存访问/刷新令牌就足够了,但是firebase auth是否为此提供了API?

  • 我在Webphere应用服务器中托管了网络应用程序。它使用log4j版本1.2.15进行日志记录,下面是我的log4j配置。日志文件不会在达到阈值时立即旋转,尽管log4j调试器说重命名为新文件。但是相同的配置在另一个环境中工作正常。请注意,JVM的单个实例只在我的两个服务器环境中运行。所以不可能通过不同的JVM锁定相同的日志文件。 log4j。属性 system.out日志

  • 我使用下面的代码生成一个。apk文件,它工作得很好。但是,为了能够调试,我需要在“applicationvariants.all”周围注释代码,另一个明智的Android Studio说没有找到该文件。 我如何才能使它为generate.apk文件工作,并在Android Studio上调试? 更新 我发现发生了什么,实际上当我在文件名中使用日期和时间时,生成的文件中的时间与Android Stu