With this code
import * as functions from "firebase-functions";
import admin from "firebase-admin";
import { addFeed } from "../../../utils/feeds";
export default functions.firestore
.document("meinprofilsettings/{userUid}/following/{followingUid}")
.onCreate(async (snap, context) => {
const db = admin.firestore();
const { userUid, followingUid } = context.params;
const userSnap = await db.doc(`meinprofilsettings/${userUid}`).get();
const { username = "Userdoesnotexists" } = userSnap.exists
? userSnap.data()
: 7;
//code for the each
const uservideos= await db.collection("videos").where(“uid”, “==“, followingUid).get().then(function(video){
await db
.doc(`meinprofilsettings/${followingUid}/followingvideos/${userUid}`)
.set({ uid: userUid ,videourl:video.data.videourl}, { merge: true });
}),
const incrementFollowing = admin.firestore.FieldValue.increment(1);
return db
.doc(`meinprofilsettingscounters/${userUid}`)
.set({ following: incrementFollowing }, { merge: true });
});
Im trying to get from a collection every videos that are from a specific user. Then I wanna set in another collection each id of the video with the video url ,but im struggling with the code .
So with this part
const uservideos= await db.collection("videos").where(“uid”, “==“, followingUid).get()
Im getting each video. im sure that this is corect , but how can now set every video in another collection
like this
.then(function(video){
await db
.doc(`meinprofilsettings/${followingUid}/followingvideos/${userUid}`)
.set({ uid: userUid ,videourl:video.data.videourl}, { merge: true });
}),
In this part im struggling and not sure what to do exactly and if its correct. So please hope anyone can tell me if we can use a ".then". If so , how can I ran then a foreach and how can I get the data like video url or name . If it's not possible, please tell me then how to do it also.
Since you want to execute an undetermined number of calls to the asynchronous set() method in parallel, you can use Promise.all() as follows:
export default functions.firestore
.document("meinprofilsettings/{userUid}/following/{followingUid}")
.onCreate(async (snap, context) => {
const db = admin.firestore();
const { userUid, followingUid } = context.params;
const userSnap = await db.doc(`meinprofilsettings/${userUid}`).get();
const { username = "Userdoesnotexists" } = userSnap.exists
? userSnap.data()
: 7;
const videosQuerySnapshot = await db.collection("videos").where(“uid”, “==“, followingUid).get();
const promises = [];
videosQuerySnapshot.forEach(videoDocSnapshot => {
promises.push(db
.doc(`meinprofilsettings/${followingUid}/followingvideos/${userUid}`)
.set({ uid: userUid, videourl: videoDocSnapshot.get('videourl') }, { merge: true })
)
})
await Promise.all(promises);
const incrementFollowing = admin.firestore.FieldValue.increment(1);
return db
.doc(`meinprofilsettingscounters/${userUid}`)
.set({ following: incrementFollowing }, { merge: true });
});