首页 文章

如何使用Hashmap在firebase firestore android中添加/更新/删除数组元素?商店数据库

提问于
浏览
4

我想创建一个用户集合,用户将有多个商店作为文档,每个文档都有 storeNamestoreAddressavailableProducts 等字段 . 我的问题是如何管理availableProducts数组?我知道Firestore无法处理数组,我应该使用HashMap . 我的可用产品可能包含产品名称,产品价格等字段 . 我是Firebase的新手,如何在Android Studio中使用java管理 availableProduct 数组?

FireBase Firestore DataBase Image

2 回答

  • 2

    Edit: September 12, 2018

    August 28, 2018 开始,现在可以更新数组成员 . 更多信息 here .


    如何在firebase firestore中添加/更新/删除数组元素?

    简短的回答是,你不能!与关于数组的official documentation一样:

    虽然Cloud Firestore可以存储数组,但它不支持查询数组成员或更新单个数组元素 .

    因此,目前无法在Cloud Firestore数据库中添加,更新或删除单个数组元素 .

    看到你的数据库模式我可以说你没有任何数组 . availableProducts 是一个对象,在它下面有一个名为 0 的 Map ,它包含两个String属性 spNamespPrice . 如果您想更新,请说出价格,请使用以下代码:

    FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
    DocumentReference ref = rootRef.collection("gdgsghs.cok").document("Shsheg");
    Map<String, Object> availableProducts = new HashMap<>();
    Map<String, Object> zeroMap = new HashMap<>();
    Map<String, Object> product = new HashMap<>();
    product.put("spPrice", 63.121);
    zeroMap.put("0", product);
    availableProducts.put("availableProducts", zeroMap);
    ref.set(availableProducts, SetOptions.merge());
    

    您的价格将从 67.368 更新为 63.121 .

  • 3

    好消息,对阵列的最新改进,您可以添加,更新和删除数组元素 .

    看看这篇博文:Better Arrays in Cloud Firestore!

    你可以这样做

    //Map to add user to array
    final Map<String, Object> addUserToArrayMap = new HashMap<>();
    addUserToArrayMap.put("arrayOfUsers", FieldValue.arrayUnion(mAuth.getCurrentUser().getUid()));
    
    //Map to remove user from array
    final Map<String, Object> removeUserFromArrayMap = new HashMap<>();
    removeUserFromArrayMap.put("arrayOfUsers", FieldValue.arrayRemove(mAuth.getCurrentUser().getUid()));
    
    //use either map to add or remove user
    db.collection("REFERENCE").document("mDocumentId")
                    .update(addUserToArrayMap);
    

相关问题