Обновление данных с помощью облачной функции Firestore - PullRequest
0 голосов
/ 20 апреля 2020

Мне нужна помощь, я пытаюсь обновить свои коллекции комментариев, используя облачную функцию, но мой код не работает. Моя функция успешно запущена, но не обновляет мой avatarUrl, когда мой userPhotoUrl обновляется

Вот полный путь к коллекции, которую я хочу обновить: "/ comments / {postId} / comments / {commentId}"

моя коллекция камина

 exports.onUpdateUser2 = functions.firestore
    .document("/users/{userId}")
    .onUpdate(async (change, context) => {
      const userUpdate = change.after.data();
      const userId = context.params.userId;
      const newPhotoUrl = userUpdate.photoUrl;
      console.log("userId",userId);
      console.log("newPhotoUrl",newPhotoUrl);

    const querySnapshot = await admin.firestore().collection("comments").get();
    querySnapshot.forEach(doc => {
      console.log("doc",doc.data());
      const postId = doc.id;
      const comments = admin.firestore().collection("comments").doc(postId).collection("comments").where("userId","==",userId).get();
      comments.forEach(doc2 => {
        return doc2.ref.update({avatarUrl: newPhotoUrl});
      });
    });
 });

Спасибо,

ОБНОВЛЕНИЕ

Я пытаюсь изменить код, используя затем , чтобы справиться с этими различными обещаниями, но я действительно не знаю, почему commentsRef.get (), кажется, возвращает мне пустой querySnapshots, потому что коллекции комментариев в моей базе данных firestore имеют несколько документов, где в В каждом документе есть другая коллекция комментариев, где в эту секунду в комментариях к коллекции есть куча документов, содержащих данные. По всему этому пути я не знаю, как выполнять итерации, пока не попал в документы, содержащие данные, которые мне нужно обновить. Может кто-нибудь помочь мне, пожалуйста?

exports.onUpdateUserUpdateComments = functions.firestore
        .document("/users/{userId}")
        .onUpdate(async (change, context) => {
          const userUpdate = change.after.data();
          const userId = context.params.userId;
          const newPhotoUrl = userUpdate.photoUrl;
          console.log("userId",userId);
          console.log("newPhotoUrl",newPhotoUrl);
          const commentsRef= admin.firestore().collection("comments");
          return commentsRef.get().then(querySnapshot => {
            return querySnapshot.forEach(doc => {
              return admin
                 .firestore()
                 .collection("comments")
                 .doc(postId)
                 .collection("comments")
                 .where("userId", "==", userId)
                 .get()
                 .then(doc => {
                   if (doc.exists) {
                     doc.ref.update({avatarUrl: newPhotoUrl});
                   }
                   return console.log("The function has been run.");
                 });
            });
          });
     });

1 Ответ

0 голосов
/ 21 апреля 2020

Без попытки это должно выглядеть примерно так:

return admin.firestore().collection("comments")
    .doc(postId)
    .where("userId", "==", userId)
    .get()
    .then(doc => {
        if (doc.exists) {
            doc.ref.update({avatarUrl: newPhotoUrl});
        }
        return console.log("The function has been run.");
    });

Независимо от того, следуя совету Дуга Стивенсона, вы не должны начинать учиться JS в облачных функциях, поскольку эти вложенные циклы немного странно, и вам может не хватить хорошей отправной точки для обучения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...