我想收集一个用户集合,用户将有多个商店作为文档,每个文档都具有storeName
,storeAddress
和availableProducts
之类的字段。我的问题是如何管理availableProducts数组?我知道Firestore无法处理数组,我应该使用HashMap。我的可用产品可能具有产品名称,产品价格等字段。我是Firebase的新手,如何在Android Studio中使用Java管理availableProduct
数组?
答案 0 :(得分:7)
好消息的人,随着数组的最新改进,您可以添加,更新和删除数组元素。
查看此博客文章: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);
答案 1 :(得分:2)
编辑:2018年9月12日
从August 28, 2018
开始,现在可以更新数组成员。更多信息 here 。
如何在Firebase Firestore中添加/更新/删除数组元素?
简短的答案是您不能!就像official documentation关于数组一样:
尽管Cloud Firestore可以存储阵列,但
it does not support
可以查询阵列成员或更新单个阵列元素。
因此,目前无法在Cloud Firestore数据库中添加,更新或删除单个数组元素。
看到您的数据库模式,我可以说您没有任何数组。 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
。
答案 2 :(得分:0)
这是将新项目添加到文档中现有集合的方法:
FirebaseFirestore.getInstance().collection("COLLECTION_NAME").document("DOCUMENT_ID").update("NAME_OF_COLLECTION_NODE",FieldValue.arrayUnion(NEW_VALUE_OF_ANY_TYPE))
检查此链接以获取更多信息:https://firebase.googleblog.com/2018/08/better-arrays-in-cloud-firestore.html