Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

127
Views
Cloud Functions document copy

Cloud functions

  1. I want to read the document and edit some fields to add it as a new document. How can I do that?

const newData = value.data(); //<<< field modification

  1. And can I use copyWith ?

Code:

exports.productCopy = functions.https.onCall( async (data, context)=>{

    const uid = context.auth.uid;

 



    data.selectedProductId.forEach((docId){
        const productRef = admin.firestore()
                 .collection('products')
             
                 .doc(docId);
        const newProductRef = admin.firestore()
                         .collection('products')
                  
                         .doc();

        const product = await productRef.get().then((value)=>{
            const newData = value.data();

            newProductRef.add(value.data())
        });



    });


    return {status:'success', isError: false};


});
about 4 years ago ยท Juan Pablo Isaza
2 answers
Answer question

0

First, is good to know that each document is immutable, after you get a document in a variable you can modify that variable, and then you will need to put/update/patch the new document.

I meant you need to do 2 API calls, to save correctly the document in your database.

about 4 years ago ยท Juan Pablo Isaza Report

0

You can't really use await in forEach block. If you want to wait for multiple actions, use Promise.all().

It should be something like this:

exports.productCopy = functions.https.onCall((data, context) => {
    const uid = context.auth.uid;

    const promises = data.selectedProductId.map((docId) => {
        return admin.firestore() // ๐Ÿ‘ˆ Return promise, which bubbles up
          .collection('products')                  
          .doc() // ๐Ÿ‘ˆ You need to specify a document ID here, uid maybe?
          .get()
          .then((doc) => {
            const newData = doc.data();
            return admin.firestore() // ๐Ÿ‘ˆ Return promise, which bubbles up
                 .collection('products')             
                 .doc(docId)
                 .add(value.data());
          });
    });

    return Promise.all(promises).then((results) => { // ๐Ÿ‘ˆ Wait for all promises to resolve
      return { status:'success', isError: false };
    })
});

In general it's best to not mix async/await with then(), as it's easy to get into situations as you had. Here, just using promises keep the code as simple as possible

about 4 years ago ยท Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
ยฉ 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!