Итак, у меня есть группа баз данных Firestore, вот так.
companies > acme-industries > items > []
OR
collection > document > collection > document
Было бы лучше просто сохранить все элементы в базовой коллекции, а затем добавить строковое значение к каждому элементу, определяющее, к какой компании он относится? Тогда просто запросите коллекцию товаров для всех товаров, связанных с этой компанией?
Я пытаюсь получить элементы и запустить их через forEach в моей функции firebase. Я пробовал два разных подхода и смотрел несколько видео, но до сих пор не получил результатов.
Блок кода первой попытки
В результате возникла ошибка сервера 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, что мне здесь не хватает?
UPDATE
Я заменил свой код на блок кода третьей попытки и добился успеха с console.log(doc.data())
. Тем не менее, объект items по-прежнему возвращается пустым. Это потому, что он возвращается до того, как для каждого сделано? Если это так, как вы могли бы предотвратить это, чтобы гарантировать, что каждый элемент, который должен быть возвращен, является
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. Но я еще не видел этого.