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