I want to make a collection of users, users will have multiple stores as documents, each document have fields like storeName, storeAddress and availableProducts. My question is that how to manage availableProducts array? I know Firestore can't handle arrays, I should use HashMap. My available products may have field like product name, product price etc. I am new in Firebase, how can I manage availableProduct array using java in Android Studio?
-
Are you asking how do you gather that data and put it into an Array or should you use a Map instead? Or how do you use a Map for that snapshot?Torewin– Torewin2018-07-06 03:43:54 +00:00Commented Jul 6, 2018 at 3:43
-
should i use map or subcollection?sum20156– sum201562018-07-06 03:57:19 +00:00Commented Jul 6, 2018 at 3:57
-
Personally, I would use a Map as it makes more sense and easier. Which way is better, is up for interpretation. You might want to create a class of availableProduct, but the Map works just as well.Torewin– Torewin2018-07-06 04:01:49 +00:00Commented Jul 6, 2018 at 4:01
3 Answers
Good news guys, with the latest improvement to arrays you can add, update and remove an array element.
Check out this blog post: Better Arrays in Cloud Firestore!
You can do it like this
//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);
2 Comments
Edit: September 12, 2018
Starting with August 28, 2018, now it's possible to update array members. More informations here.
How to Add/Update/Remove array elements in firebase firestore?
The short answer is that you cannot! As in the official documentation regarding arrays:
Although Cloud Firestore can store arrays,
it does not supportquerying array members or updating single array elements.
So there is currently no way to add, update or remove a single array element in a Cloud Firestore database.
Seeing your database schema I can say that you don't have any arrays. The availableProducts is an object, beneath it there is a map named 0 which holds two String properties, spName and spPrice. If you want to update, let's say the price, please use the following code:
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());
Your price will be updated from 67.368 to 63.121.
This is how you can add a new item to an existing collection inside a document :
FirebaseFirestore.getInstance().collection("COLLECTION_NAME").document("DOCUMENT_ID").update("NAME_OF_COLLECTION_NODE",FieldValue.arrayUnion(NEW_VALUE_OF_ANY_TYPE))
check this link for more info: https://firebase.googleblog.com/2018/08/better-arrays-in-cloud-firestore.html