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

如何添加/更新/删除数组元素在Firebase firestandroid使用Hashmap?一个存储数据库

公羊浩阔
2023-03-14

我想收集用户,用户将有多个存储作为文档,每个文档都有类似于storeNamestoreAddressavailableProducts的字段。我的问题是,如何管理availableProducts阵列?我知道Firestore不能处理数组,我应该使用HashMap。我的可用产品可能有产品名称、产品价格等字段。我是Firebase的新手,如何在Android Studio中使用java管理可用产品阵列?

FireBase Firestore数据库映像

共有3个答案

钱德元
2023-03-14

这就是您如何将新项目添加到文档中的现有集合中:

Firebase Firestore.get实例()、集合("COLLECTION_NAME")、文档("DOCUMENT_ID")、更新("NAME_OF_COLLECTION_NODE"、FieldValue.array联盟(NEW_VALUE_OF_ANY_TYPE))

查看此链接了解更多信息:https://firebase.googleblog.com/2018/08/better-arrays-in-cloud-firestore.html

程墨竹
2023-03-14

编辑: 2018年9月12日

2018年8月28日开始,现在可以更新数组成员。这里有更多信息。

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

简而言之,你不能!就像在关于数组的官方留档中一样:

尽管云Firestore可以存储数组,但它不支持查询数组成员或更新单个数组元素。

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

看到您的数据库模式,我可以说您没有任何数组。可用产品(availableProducts)是一个对象,下面有一个名为0的映射,它包含两个字符串属性,即spName和spPrice。如果要更新,比如价格,请使用以下代码:

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。

佴德曜
2023-03-14

消息是,随着数组的最新改进,您可以添加、更新和删除数组元素。

查看这篇博文:云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 maps to add or remove user
db.collection("REFERENCE").document("mDocumentId")
                .update(addUserToArrayMap);
 类似资料: