Я должен получить ответ о том, вызовет ли установка моей базы данных слишком много рекурсивных чтений и, следовательно, экспоненциально увеличит количество операций чтения.
В настоящее время у меня есть коллекция пользователей,Внутри каждого пользовательского документа у меня есть 3 других каталога, goods
, bundles
и parts
.Например, у каждого пользователя есть список деталей и список комплектов.
Каждый документ в каталоге bundles
содержит массив карт со ссылкой на документ в каталоге parts
на каждой карте.
Когда я запрашиваю пакеты, я хочутакже получите подробную информацию о каждой части в комплекте.Требуется ли для этого еще один onSnapshot
?
Вот пример:
база данных:
users (catalog)
userID
parts
partID1
partID2
partID3
bundles
bundleID1
title: "string",
parts: [
part:"/users/userID/parts/partID1,
qty: 1
]
parts: [
part:"/users/userID/parts/partID2,
qty: 1
]
parts: [
part:"/users/userID/parts/partID3,
qty: 1
]
получение пакетов
initBundle(bid) {
const path = this.database.collection('users').doc('userID').collection('bundles').doc(bid);
path.ref.onSnapshot(bundle => {
const partsArr = [];
bundle.data().parts.forEach(part => {
part.part.onSnapshot(partRef => {
const partObj = {
data: partRef.data(),
qty: part.qty
};
partsArr.push(partObj);
});
});
const bundleObj = {
title: bundle.data().title,
parts: partsArr
};
this.bundle.next(bundleObj);
});
return this.bundle;
}
Я использую Ionic / Angular для этого, поэтому, когда я возвращаю элемент, он должен быть массивом объектов.Я как бы воссоздаю объект, чтобы включить каждую часть в init
.Как вы можете видеть, для каждой части в возвращаемых пакетах я делаю еще onSnapshot
.Это кажется мне неправильным.
Что-то, что меня осенило, это то, что я, вероятно, должен сделать один звонок пользователю, который, в свою очередь, возвращает все?Но как мне получить подкаталоги в этот момент?Я не уверен, как поступить, не выставляя счет!