Получить все документы из коллекции - PullRequest
0 голосов
/ 26 апреля 2020

Я хочу получить все документы из коллекции, а затем получить их удостоверение личности. Вот как мои коллекции пользовательская коллекция Это только одна коллекция с несколькими документами. Я пытаюсь это, но это не работает:

let userRef = admin.firestore().collection('users');
      return userRef.get().then(querySnapshot => {
        let docs = querySnapshot.docs;
        for (let doc of docs) {
           console.log(doc.id);
        }
        return true;
      });

ОБНОВЛЕНИЕ

То, что я действительно пытался сделать, это получить все документы ID родителя коллекций, так что я могу использовать их для итерации в каждом из этих документов, которые содержат подколлекцию.

Так что, когда я делаю то же самое, кто работал здесь для пользовательской коллекции, в данном случае с родительской коллекцией, которая есть документы с идентификатором, которые содержат вложенную коллекцию, это не работает. Как будто в моей коллекции нет документов.

let savedRef = await admin.firestore().collection('saved');
        return savedRef.get().then(querySnapshot => {
          console.log(querySnapshot);
          let docs = querySnapshot.docs;
          for (let doc of docs) {
             console.log(doc.id);
          }
          return true;
        });

сохраненная коллекция, содержащая документы с вложенной коллекцией

У вас есть идеи, почему? Спасибо,

Ответы [ 2 ]

2 голосов
/ 26 апреля 2020

Да, querySnapshot можно легко повторить и получить то, что вы хотите. Вот как я обычно повторяю снимки запросов Firestore:

//I like to separate DB instance for re-utilization
var db = admin.firestore()

//Also a good practice to separate reference instance
var usersReference = db.collection("users");

//Get them
usersReference.get().then((querySnapshot) => {

    //querySnapshot is "iteratable" itself
    querySnapshot.forEach((userDoc) => {

        //userDoc contains all metadata of Firestore object, such as reference and id
        console.log(userDoc.id)

        //If you want to get doc data
        var userDocData = userDoc.data()
        console.dir(userDocData)

    })

})
0 голосов
/ 27 апреля 2020

Чтобы выполнить итерацию по элементам вложенной коллекции в указанном документе c, вы можете сделать следующее:

db.collection("ParentCollection").doc("DocumentID").collection("SubCollection").get()
.then((querySnapshot) => {
      ...
  });
});

Если вы хотите выполнить итерацию по всем вложенным коллекциям всех родительских коллекций, которые вы можете выполните следующие действия:

db.collection("ParentCollection").get().then((querySnapshot) => {
  querySnapshot.forEach((document) => {
    document.ref.collection("SubCollection").get().then((querySnapshot) => {
      ...
    });
  });
});

РЕДАКТИРОВАТЬ: Добавление точного примера кода, который работал для меня:

const app = express();
const Firestore = require('@google-cloud/firestore');

const db = new Firestore({
  projectId: 'my-project-id',
  keyFilename: '/path/to/service/account/key/file.json',
});

app.get('/', async (req, res) => {
  db.collection("ParentCollection").get().then((querySnapshot) => {
    // console.log(querySnapshot)
    querySnapshot.forEach((document) => {
      document.ref.collection("SubCollection").get().then((querySnapshot) => {
        console.log(querySnapshot)
        querySnapshot.forEach((document) => {
          console.log(document.id, '=>', document.data());
        });
      });
    });
  });
  res
  .status(200)
  .send('Hello, world!\n')
  .end();
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...