Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
链接Firebase Firestore文档/集合_Firebase_Google Cloud Firestore - Fatal编程技术网

链接Firebase Firestore文档/集合

链接Firebase Firestore文档/集合,firebase,google-cloud-firestore,Firebase,Google Cloud Firestore,我有一个像这样的Firestore数据库组 公司>acme industries>项目>[] 或 集合>文档>集合>文档 将所有项目存储在一个基本集合中,然后为每个项目添加一个字符串值来定义它所属的公司,这是否更好?然后只需查询与该公司链接的所有项目的项目集合? 我正在尝试检索这些项目,并通过firebase函数中的forEach运行它们。我尝试了两种不同的方法,看了多个视频,但仍然没有得到结果 首次尝试代码块 这导致500服务器错误,并且没有返回任何解释 const itemQuerySn

我有一个像这样的Firestore数据库组

公司>acme industries>项目>[]
或
集合>文档>集合>文档

将所有项目存储在一个基本集合中,然后为每个项目添加一个字符串值来定义它所属的公司,这是否更好?然后只需查询与该公司链接的所有项目的项目集合?

我正在尝试检索这些项目,并通过firebase函数中的forEach运行它们。我尝试了两种不同的方法,看了多个视频,但仍然没有得到结果

首次尝试代码块

这导致500服务器错误,并且没有返回任何解释

const itemQuerySnapshot = db.collection('companies').doc(data.userData.company).collection('items').get();
const items: any = [];
itemQuerySnapshot.forEach((doc:any) => {
  console.log('doc', doc.data());
  items.push({
   id: doc.id,
   data: doc.data()
  });
});
response.json(items);
第二次尝试代码块

这导致
没有此类文档正在返回

const itemRef = db.collection('companies').doc(data.userData.company).collection('items');
itemRef.get().then((doc:any) => {
    if(!doc.exists) {
        response.send('No such documents!');
    } else {
        response.send('Document Data: '+ doc.data());
    }
}).catch((err:any) => {
    response.status(500).send(err);
});
我期望从这个调用中返回一个类似于所有项的数组。我是Firebase Firestore的新手,我在这里错过了什么

更新

我用一个第三次尝试的代码块替换了我的代码,并且通过
console.log(doc.data())
获得了成功。但是,items对象仍然返回空。这是因为它在完成for each之前返回吗?如果是这样的话,您将如何防止这种情况发生,以确保应归还的每一件物品都是安全的

const items: any = [];
const userRef = db.collection("companies").doc(data.userData.company);
const itemsRef = userRef.collection("items");
itemsRef
  .get()
  .then((snapshot: any) => {
    snapshot.forEach((doc: any) => {
      console.log(doc.data());
      items.push({
        id: doc.id,
        data: doc.data()
      });
    });
  })
  .catch((err: any) => {
    response.status(500).send(err);
  });
response.json(items);
您将如何在混合中再添加一个文档?假设你想要一件物品。你会怎么做?以下总是导致从my函数返回的
项不存在

const companyRef = db.collection('companies').doc(data.userData.company);

const itemRef = companyRef.collection('items');

const item = itemRef.where('number', '==', itemSku).get();

我一定是做错了什么,因为所有的视频都告诉我从Firestore获取数据非常容易。但是我还没有看到。

get
返回一个承诺,一旦数据从firestore中准备好,就会调用
然后
函数的回调

response.json(items)

您需要在
回调中移动此行,然后
回调

签出此:

.then((snapshot: any) => {
    snapshot.forEach((doc: any) => {
        console.log(doc.data());
        items.push({
            id: doc.id,
            data: doc.data()
        });
    });

    response.json(items);    //items ARRAY IS READY , YOU CAN SEND YOUR RESPONSE HERE 
})