从集合中获取所有文档

时间:2020-04-26 02:11:50

标签: node.js firebase google-cloud-firestore google-cloud-functions

我想从集合中获取所有文档,然后与它们一起获取ID。 这是我的收藏user collection 这只是一个包含多个文档的集合。 我尝试了一下,但是没有用:

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,以便我可以使用它们在每个包含子集合的文档中进行迭代。

因此,当我在此处为用户集合工作的人做同样的事情时,在这种情况下,父集合具有包含子集合的文档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;
        });

saved collection which contain documents with a subcollection

你知道为什么吗? 谢谢

2 个答案:

答案 0 :(得分:3)

是的,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)

    })

})

答案 1 :(得分:0)

为了遍历特定文档中的子集合元素,您可以执行以下操作:

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();
});