Построение функции запроса velo для суммирования общих значений из нескольких наборов данных

#javascript #arrays #velo

Вопрос:

Спасибо, что посмотрели на этот вопрос. Это сводит меня с ума.

У меня есть 2 базы данных с различными полями, которые:

набор данных = проектные продукты

идентификатор поля = product // соответствующий идентификатор в наборе данных продуктов

идентификатор поля = productQuantity // возвращает номер

набор данных = продукты

идентификатор поля = _id // соответствие значению поля продукта в продуктах проекта

идентификатор поля = productPrice // возвращает номер

Я пытаюсь запросить набор данных projectproducts и извлечь элементы из product поля (их несколько сотен) и количество из productQuantity поля.

Затем на основе product поля (которое относится к ID элементу/строке в наборе данных продуктов) запросите набор данных продуктов и извлеките результат из productPrice поля.

Тогда я хотел бы умножить

productQuantity результат x productPrice результат

и сложите все значения вместе, чтобы получить окончательную сумму.

Ответ №1:

Я не уверен в том, чем это отличается, когда задействованы наборы данных, но вот подход, который использует wixData напрямую

 import wixData from 'wix-data';

$w.onReady(async function () {
    const {items: projectproducts} = await wixData.query('projectproducts').find();
    const projectproductsQuery = wixData.query('products');
    projectproducts.forEach(pp => {
        projectproductsQuery.eq('_id', pp.product)
    })
    const {items: products} = await projectproductsQuery.find();
    const productsPrices = products.reduce((acc, current) => ({
        ...acc,
        [current._id]: current.price
    }), {});
    console.log({products, productsPrices, projectproducts});
    const sum = projectproducts.reduce((acc, current) => {
        return acc   productsPrices[current.product] * current.productQuantity;
    }, 0);
    console.log(sum);
});
 

Демо: https://moshef9.wixsite.com/agg-collections (Откройте console для получения дополнительной информации о коллекциях)