soger
soger

Reputation: 41

How to add data on nested array in Firestore with react-native

I would like to ask if is it possible to add data in a nested array.The result i want is this enter image description here

But i get this when i add a new rating with the code i use

enter image description here

async function getAll(){
    const userEmail= firebase.firestore().collection('users')
    const snapshot=await userEmail.where('email','==',index.email).get()
    if (snapshot.empty) {
      console.log('No matching documents.');
      return;
    }  
    
    snapshot.forEach(doc => {
      userEmail.doc(doc.id).set({userRatings2:firebase.firestore.FieldValue.arrayUnion({parking:[markerName]})},{merge:true})
      userEmail.doc(doc.id).set({userRatings2:firebase.firestore.FieldValue.arrayUnion({rating:[currentRating]})},{merge:true})

     
      
     console.log(userEmail.doc(doc.id));
    });
  }
  getAll()

Upvotes: 0

Views: 2336

Answers (2)

Hardik poudel
Hardik poudel

Reputation: 151

I've managed to do it by using forEach function to an array of image path

  const [imageUri, setImageUri] = useState([]);
  const [uploading, setUploading] = useState(false);

  const UploadImage = () => {
    setUploading(true);
    imageUri.forEach(async (image, index) => {
      // setTransferred(0);

      const pathToFile = image;
      let filename = pathToFile.substring(pathToFile.lastIndexOf('-') + 1);
      const extension = filename.split('.').pop();
      const name = filename.split('.').slice(0, -1).join('.');
      filename = name + Date.now() + '.' + extension;

      const reference = storage().ref().child(`/userprofile/${filename}`);
      // path to existing file on filesystem

      // uploads file
      const task = reference.putFile(pathToFile);
      try {
        await task;

        const url = await reference.getDownloadURL();
        downloadableURI.push(url);
        if (index == imageUri.length - 1) {
          setUploading(false);
          Alert.alert(
            'Image uploaded!',
            'Your image has been uploaded to the Firebase Cloud Storage Successfully!',
          );
        }
      } catch (e) {
        console.log(e);
      }
    });
  };

whenever the function is called, then the array of images is uploaded to firebase storage,

Upvotes: 0

Tarik Huber
Tarik Huber

Reputation: 7388

Unfortunately in Firebase Firestore you can't even change a simple Array value at a specific index. That means also that you can't save nested array values. You can read more about it on this answer.

The only way to do it is to download the whole Array make your modifications and save the whole array again to the databse. There is not much context of your app so I can't tell if that is a good solution for you. It depends how much data you have in the array.

Upvotes: 1

Related Questions