从用户集合Firebase中获取每个文档

时间:2019-09-06 18:47:43

标签: javascript firebase google-cloud-functions

我写了一个Firebase云功能,我想在其中获取每个用户的内部集合,称为“数字”,并从该集合中读取每个文档以进行一些比较。

有什么想法吗?

对于Firebase来说我还很陌生,由于某种原因,数据库导航命令对我来说还不太好。

我尝试了一些命令但没有成功

const snapshot = functions.database.collection('users').collection('numbers').get()
 let sfRef = db.collection('users');
    sfRef.getCollections().then(collections => {
        collections.forEach(collection => {
        console.log('Found subcollection with id:', collection.id);
        });
    });

这是一个松散的云代码基础结构

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

export const prize1 = functions.pubsub.schedule('every 5 minutes').onRun((context) => {
    const users = functions.database.ref('/users/numbers')

    console.log("")
    return null;
});

我觉得我有一个很好的主意,但是语法使我受挫。

用户集合。浏览此处的每个文档,即每个用户。 在每个用户中转到称为数字的集合。 在称为数字的集合中,遍历每个文档并找到数字字段以进行逻辑/比较。

data 希望这可以帮助您了解我的数据库的订购方式。

2 个答案:

答案 0 :(得分:1)

您可以这样尝试:

let usersRef = db.collection('users');
let allUsers = usersRef.get();
   .then(userSnapshot => {
     userSnapshot.forEach(userDoc => {
       userDoc.ref.collection('numbers').get().then(numSnapshot => {
         numSnapshot.forEach(numDoc => {
           console.log(numDoc.data().numbers);
           // here you got your numbers document with the numbers field
         });
       });
     });
   })
   .catch((error) => { 
       console.log("Error getting document: ", error);
   });  

有关更多信息,请查看herehere

答案 1 :(得分:1)

您不能使用functions访问数据库。您定义为functions的目的是构建响应事件的触发器。如果您想从Cloud Firestore获取数据,则应该通过admin使用Firebase Admin SDK。如果您浏览official samples,这也可能会有所帮助。

我还将指出,您的代码示例似乎在访问Cloud Firestore和实时数据库(这是不同的数据库产品)之间是分开的。您的屏幕截图显示了Firestore,因此请忽略任何用于实时数据库的API。