【发布时间】:2019-11-04 19:40:03
【问题描述】:
所以,我有一个这样的 Firestore 数据库组。
companies > acme-industries > items > []
OR
collection > document > collection > document
最好将所有项目存储在一个基本集合中,然后为每个项目添加一个字符串值来定义它所属的公司吗?然后只查询与该公司关联的所有项目的项目集合?
我正在尝试检索项目并通过我的 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);
第二次尝试代码块
这导致No Such Documents! 被返回
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()) 获得了成功。但是,项目对象仍然返回空。这是因为它在 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);
您将如何再添加一份文档?假设您想获得一件物品。你会怎么做?以下总是导致从我的函数返回Item does not exist。
const companyRef = db.collection('companies').doc(data.userData.company);
const itemRef = companyRef.collection('items');
const item = itemRef.where('number', '==', itemSku).get();
我一定是做错了什么,因为所有视频都告诉我从 Firestore 获取数据非常容易。但我还没有看到。
【问题讨论】:
标签: firebase google-cloud-firestore