Я использую Angular и Google FireStore для хранения списка «заказов».Каждый заказ имеет список «товаров».Как я могу получить один наблюдаемый массив продуктов, который сведен со всех «заказов», которые полностью заполняют наш запрос?
Данные выглядят так:
[
{
id: "item1",
products: [
{ product1... }, {product2... }
]
},
{
id: "item2",
products: [
{ product3...}, {product2... }
]
}
]
конечный результат должен бытьнаблюдаемый список продуктов:
[{product1...}, {product2...}, {product3...}, {product2...}]
Я пытался использовать flatMap, но не могу заставить его правильно работать с результатом запроса AngularFire.Мое текущее "испытание" работает довольно далеко и выдает единый список "продуктов".Проблема в том, что он имеет «продукты» только из последнего «заказа».
Вот что у меня сейчас:
return this.db.collection<Order>('orders', ref => ref.where('status', '==', 3))
.snapshotChanges()
.pipe(
flatMap(orders=> {
return orders.map(a => {
const order = a.payload.doc.data() as Order;
return order.products;
})}))
Я знаю, что схема ужасна и «продукты»должно быть в его собственной коллекции, но я не могу ее контролировать: (
Пожалуйста, помогите:)