Пустой querySnapshot из родительской коллекции - PullRequest
0 голосов
/ 28 апреля 2020

Кто-нибудь знает, есть ли способ перебора в документах родительских коллекций? Я пытаюсь ie получить все документы из моей родительской коллекции, но querySnapshot кажется пустым, хотя это не так.

My function log that show a querySnapshot of size equal to 0

Here my firestore collections

Мой путь к коллекции выглядит следующим образом:

parentCollection(comments)/docs/subCollection(comments)/docs

И что я пытаюсь сделать, это выполнять итерации в каждой подколлекции и их документах, и для этого мне нужно выполнять итерацию в каждом документе родительской коллекции, но когда я использую get (), он возвращает пустой querySnapshot.

Вот мой код:

return admin.firestore().collection("comments").get().then((querySnapshot) => {
    console.log(querySnapshot);
    querySnapshot.forEach((doc) => {
      console.log(doc);
      return doc.ref.collection("comments").get().then((querySnapshot2) => {
        console.log(querySnapshot2);
        querySnapshot2.forEach((doc2) => {
          console.log(doc2.data());
        })
        return true;
      });
    });
    return true;
  });

Ps: я знаю, я не должен вкладывать обещание.

ОБНОВЛЕНИЕ

Вот что возвращает мой console.log, когда log querySnapshot.size и querySnapshot.empty:

console.log of my querySnapshot.size & querySnapshot.empty

вот весь код:

const functions = require("firebase-functions");
const admin = require("firebase-admin");
admin.initializeApp();


exports.onUpdateUserUpdateComments = functions.firestore
    .document("/users/{userId}")
    .onUpdate(async (change, context) => {
      const userId = context.params.userId;
      const userUpdate = change.after.data();
      const newPhotoUrl = userUpdate.photoUrl;
      console.log("userId",userId);
      console.log("newPhotoUrl",newPhotoUrl);
      return admin.firestore().collection("comments").get().then((querySnapshot) => {
        console.log(querySnapshot.size);
        console.log(querySnapshot.empty);
        querySnapshot.forEach((doc) => {
          console.log(doc);
          return doc.ref.collection("comments").get().then((querySnapshot2) => {
            console.log(querySnapshot2);
            querySnapshot2.forEach((doc2) => {
              console.log(doc2.data());
            })
            return true;
          });
        });
        return true;
      });
 });

После развертывания здесь выводится лог

enter image description here

Ответы [ 2 ]

0 голосов
/ 04 мая 2020

После нескольких тестов я понял, что проблема была в том, что даже если документы видны из консоли, их не существует. Они не существуют, потому что даже если они содержат вложенную коллекцию, они не считаются данными. Вот почему do c находится на итальянском c и почему отображается следующее предложение: " Этот документ не существует и не будет отображаться в запросах или снимках "

Кому Чтобы решить эту проблему, вы должны либо добавить данные в эти документы и удалить их, если они не нужны, либо создать их вручную в консоли. Или, что еще лучше, если вы не хотите ничего менять в своем коде, вы можете использовать метод listDocuments . Admin SDK предоставляет метод listDocuments с этим описанием:

Возвращенные ссылки на документы могут включать ссылки на «отсутствующие документы», то есть местоположения документов, в которых нет документа, но которые содержат вложенные коллекции с документами. , Попытка прочитать такую ​​ссылку на документ (например, через .get () или .onSnapshot ()) вернет DocumentSnapshot, свойство .exists которого имеет значение false.

0 голосов
/ 01 мая 2020

Я реализовал эту функцию для точного копирования / вставки вашего кода, и я могу подтвердить, что она работает отлично.

Я также добавил, конечно, структуру к моему тестовому хранилищу: структуру

-comments - <genrated docID1> -comments - empty
          - <genrated docID2> -comments - <dummy document> 

и users, чтобы триггер работал. Я запустил его, обновив поле 'photoUrl' вручную.

С этой структурой querySnapshot.size дает значение 2, а querySnapshot.empty равно false.

Действительно, вы можете найти в журналах QuerySnapshot с _size: 0,, однако это для этой вложенной пустой коллекции 'comments'.

Кстати, в родительской коллекции этого кода QuerySnapshot вообще не зарегистрировано. Только документы родительской коллекции и вложенных коллекций.

Надеюсь, это поможет!

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