You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase字段更新异常:修改时新增字段而非覆盖原字段求助

问题修复方案

问题出在Realtime Database更新时传错了键值:你调用updateRealtimeDatabase时传入的是Firestore文档ID,而非药品名称(比如"Plavix 75mg"),导致Realtime Database误以为要新增一个以文档ID为键的字段,而非更新原有药品的数值。

具体修复步骤:

  1. 修改updatePharmaceutical方法中调用updateRealtimeDatabase的逻辑,传入正确的药品名称:
    在更新Firestore成功后,先从目标文档中获取药品名称,再传给Realtime Database更新方法:

    storeCollection.document(documentId).update(updates)
        .addOnSuccessListener(aVoid -> {
            Toast.makeText(this, "Successfully updated.", Toast.LENGTH_SHORT).show();
            // 获取药品名称后再更新Realtime Database
            storeCollection.document(documentId).get().addOnSuccessListener(docSnapshot -> {
                String drugName = docSnapshot.getString("drugName");
                updateRealtimeDatabase(drugName, newQuantity);
            });
        })
        .addOnFailureListener(e -> Toast.makeText(this, "Error caught while updating document", Toast.LENGTH_SHORT).show());
    
  2. (可选)调整updateRealtimeDatabase的参数命名,让语义更清晰(不影响功能,仅提升代码可读性):

    private void updateRealtimeDatabase(String drugKey, String newQuantity) {
        FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser();
        if (currentUser != null) {
            String userId = currentUser.getUid();
            DatabaseReference userRef = FirebaseDatabase.getInstance().getReference("Pharmacists").child(userId).child("drugData");
            userRef.child(drugKey).setValue(newQuantity)
                .addOnSuccessListener(aVoid -> Log.d("ViewPharmaceuticals", "Realtime Database updated with new quantity"))
                .addOnFailureListener(e -> Log.e("ViewPharmaceuticals", "Error updating Realtime Database", e));
        }
    }
    

补充说明:

原代码中updatePharmaceutical调用updateRealtimeDatabase(documentId, newQuantity),这里的documentId是Firestore自动生成的文档ID,和Realtime Database里drugData下的药品名称键完全不匹配,所以才会出现新增字段的问题。修复后,Realtime Database会根据药品名称找到对应字段并更新数值,不会再生成无关的新字段。

内容的提问来源于stack exchange,提问作者Pramuka Navodh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 21:25:56