Append element to Firebase Array
In this case, you will have to read the existing data, then write it back with the new value added. Arrays like this are not always the best way to store lists of data if you want to perform a lot of append operations. For that, you're better off pushing data into a location using childByAutoId.
Firebase database. How to append values to array?
There is no atomic operation to add an item to an array directly in the database. This means you'll need to:
- Read the array into your application code
- Append the item to the array
- Write the entire array back to the database
This is one of the many reasons why Firebase recommends against using arrays for lists of data, but instead has a push()
operation that circumvents most problems. For more on this, see the link to the document that Nilesh included in their comment, or read this article on Best Practices: Arrays in Firebase.
Append to an arary field in Firestore
You can append an item to an array using FieldValue.arrayUnion() as described in the documentation. For example:
// Atomically add a new region to the "regions" array field.
washingtonRef.update({
regions: firebase.firestore.FieldValue.arrayUnion("greater_virginia")
});
Can you append a string to a Firebase array with swift
Firestore has a special documented operation to append a single item to the end of an array using FieldValue.arrayUnion():
let washingtonRef = db.collection("cities").document("DC")
// Atomically add a new region to the "regions" array field.
washingtonRef.updateData([
"regions": FieldValue.arrayUnion(["greater_virginia"])
])
If you want make any changes to an array other than add or remove a single item, you will have to read the array, modify it, then write it back.
firebase - add and remove new values into an array
There is no atomic way to add an item to or remove an item from an array in the Firebase Realtime Database API. You'll have to read the entire array, add the item, and write the array back.
Better would be to store the followers
and followings
as maps instead of arrays, with values of true
(since you can't have a key without a value in Firebase. If you'd do that, adding a new user follower would be:
set(ref(db, 'Users/'+ this.profileKey+'/followers/'+store.currentUser.uid), true)
And removing a follow would be:
set(ref(db, 'Users/'+ this.profileKey+'/followers/'+store.currentUser.uid), null)
Or
remote(ref(db, 'Users/'+ this.profileKey+'/followers/'+store.currentUser.uid))
Also see: Best Practices: Arrays in Firebase.
How to Append data to an Array in Firebase?
When you call updateChildren()
with a map, Firebase takes each key and replaces the object at that location with the value from the map.
The Firebase documentation on updateChildren()
says this about it:
Given a single key path like
alanisawesome
,updateChildren()
only updates data at the first child level, and any data passed in beyond the first child level is a treated as a setValue() operation.
So in your case, you are replacing the entire contents of "/" + Constants.FIREBASE_LOCATION_USERS + "/" + mEncodedEmail + "/subscribedTo"
.
The solution is to either make the PROG_ID
part of the key in the map:
userMap.put("/" + Constants.FIREBASE_LOCATION_USERS + "/" + mEncodedEmail + "/subscribedTo/"+PROG_ID, true);
firebaseRef.updateChildren(userMap, ...
Or to simply call setValue()
at the lower location in the JSON tree:
firebaseRef.child("/" + Constants.FIREBASE_LOCATION_USERS + "/" + mEncodedEmail + "/subscribedTo/"+PROG_ID).setValue(true);
You'll note that in both cases I got rid of your array in favor of the recommended structure for such a so-called index:
"subscribedTo": {
"-KFPi5GjCcGrF-oaHnjr": true
},
How to add element to array at firestore database? (python)
The problem was in PyCharm Indexes, something like that. Code could run and ArrayUnion worked, but IDE said that there are no function ArrayUnion.
Add element to an array in Firestore
Based on what you mentioned here: "I'm trying to add multiple uids to a followers & following array".
It sounds like you just want:
userA to follow userB and update both following/followers field accordingly?
If that's the case you will want something like this:
following: [..., userBId]
followers: [..., userAId]
You need to use FieldValue.arrayUnion
. Trying changing this:
followUserRef.update({ following: true }, { merge: true });
followingRef.update({ followers: true },{ merge: true });
to this:
followUserRef.update({following: firebase.firestore.FieldValue.arrayUnion(followingId)})
followingRef.update({followers: firebase.firestore.FieldValue.arrayUnion(userId)})
This should allow you to add a new index (the followingId) to the userA "followers" array and add userId to the array of followers of the person that userA is now following.
Firestore: add or remove elements to existing array with Flutter
Hopefully, yes.
You can append or remove an element using the method update() in combination with FieldValue.arrayUnion([element])
or FieldValue.arrayRemove([element])
.
Example:
Future<void> appendToArray(String id, dynamic element) async {
_firestore.collection(RootKey).doc(id).update({
'myArrayField': FieldValue.arrayUnion([element]),
});
}
Future<void> removeFromArray(String id, dynamic element) async {
_firestore.collection(RootKey).doc(id).update({
'myArrayField': FieldValue.arrayRemove([element]),
});
}
Related Topics
How to Go to Specific Native View Controller from React-Native Code
Svg Viewbox Height Issue on iOS Safari
Applying Different Attributes for Different Portions of an Nsattributedstring
Does "Let _ = ..." (Let Underscore Equal) Have Any Use in Swift
iOS Wkwebview Swift JavaScript Enable
Can't Add a New iOS Version for My App
Force UIsplitviewcontroller to Always Show Master (Only) in Landscape (On iPhone 6 Plus)
Rgba to Abgr: Inline Arm Neon Asm for iOS/Xcode
Segue from Uitableviewcell by Tapping on an Image Inside of Cell
Selecting All The Items in UIcollectionview iOS, Even The Cells That Are Not Visible
Ckfetchnotificationchangesoperation Sometimes Does Not Return Update, Delete Notifications
How to Switch Programmatically to Dark Mode Swift
Problems with Layout of Some Rows in Swiftui List