Firebase Firestore 数据库将所有数据替换为单个数据

Posted

技术标签:

【中文标题】Firebase Firestore 数据库将所有数据替换为单个数据【英文标题】:Firebase Fire store database replacing all data to single one 【发布时间】:2021-08-23 19:20:35 【问题描述】:

我有一个错误。当用户上传他的图片时。其他数据都消失了,只有配置文件 URI 可见。

目前,我有 5 个字符串

姓名 电子邮件 密码 个人资料(图片 URI) 参考编号 硬币

但是,当用户上传他们的个人资料照片时,所有数据都会被删除。

仅显示个人资料图片 URI

我已在此处附上代码

private void updateUserProfile() 
    Map<String,String > profile = new HashMap<>();
    profile.put("profile",imageUri.toString());

    database
            .collection("Users") // the path of users.
            .document(FirebaseAuth.getInstance().getUid()) // to update in the current users.
        //    .update(user)
            .set(profile)
            .addOnSuccessListener(new OnSuccessListener<Void>() 
                @Override
                public void onSuccess(Void unused) 

                 Toast.makeText(getContext(), "Photo Updated!", Toast.LENGTH_SHORT).show();

                
            );

【问题讨论】:

【参考方案1】:

如果您只想更新单个字段,何时可以在不使用任何 Map 值的情况下更新。

firestore.collection("YOUR_COLLECTION").document(user.getUid()).update("profile", imageUri.toString())
                .addOnCompleteListener(task -> 
                    
                );

【讨论】:

【参考方案2】:

如果您调用.set(profile),您将用profile 中的任何内容替换现有数据。如果要将profile 中的值与文档中的任何现有数据合并,请改用.update(profile)

另请参阅 updating data in a document 上的 Firebase 文档。

【讨论】:

感谢您的回答。我已经从 firebase 开发人员文档的 firebase 更新数据中获得了它。【参考方案3】:

感谢您的回答。我已经解决了这个问题。我附上了下面的代码。

private void updateUserProfile()

  Map<String, Object> profile = new HashMap<>();

  profile.put("profile", imageUri.toString());



    final DocumentReference sDoc = database.collection("Users").document(FirebaseAuth.getInstance().getUid());
    database.runTransaction(new Transaction.Function<Void>() 


        @Override
        public Void apply(@NonNull  Transaction transaction) throws FirebaseFirestoreException 
            DocumentSnapshot snapshot = transaction.get(sDoc);


            transaction.update(sDoc, profile);
          //  transaction.update(sDoc, "name", binding.nameBox.getText() );

            return null;
        

【讨论】:

以上是关于Firebase Firestore 数据库将所有数据替换为单个数据的主要内容,如果未能解决你的问题,请参考以下文章

Vuejs + Firebase Storage 将多个图像上传到 Firebase Storage 并将所有 downloadURL 推送到 Firestore

Flutter将图像上传到firebase存储然后将其写入firestore

使用flutter将多张图片上传到firestore并获取它的下载URL并将所有URL保存到firebase

Flutter & Firebase - FirebaseFirestoreException:如果我按照以下方式制定了 Firebase 规则,如何获得使用 Firestore 中所有数据的

将 Firebase 实时数据库迁移到 Firestore

如何将我的 Firebase 实时数据库转移到 Firebase Cloud Firestore