uni-app中关于聚合查询问题

发布于 1周前 作者 itying888 来自 Uni-App

uni-app中关于聚合查询问题

有两个表,分别为产品my-product和客户需求表client,需要按日汇总统计每天有多少客户提出需求,客户需产品的总数量,及各产品需求数量,如下图

希望统计结果

现在尝试以下查询语句,能做到按日统计产品需求数量,但是还查不出每日各产品需求数量,尝试写了一个按条件统计c002产品,但提示数据库指令不正确,请大佬有时间帮忙看看,指点一下,感谢!

const dateBase = $.dateFromParts({year: 1970, month: 1, day: 1, hour: 8, minute: 0, second: 0, millisecond: 0, timezone: 'Asia/Shanghai'})
timstampToDate = $.add([dateBase, $.multiply(['$last_modify_time', 1])])
records = db.collection('client').aggregate()
.addFields({
  formatDate: $.dateToString({
    date: timstampToDate,
    format: '%Y-%m-%d',
    timezone: 'Asia/Shanghai'
  })
})
.project({
  _id:0,
  formatDate:'$formatDate',
  need_product:'$need_product'
})
.unwind('$need_product')
.group({
  _id:'$formatDate',
  num:$.sum(1),
  c002:$.cond({ //这里出错,想按照条件统计产品c002,但是提示数据库指令本部正确
    if: $.eq(['$need_product', "c002"]),
    then: $.sum(1),
    else 0,
  })
})
.end()  

1 回复

在uni-app中处理聚合查询通常涉及与后端数据库的交互,因为前端本身并不具备直接执行复杂数据库查询的能力。不过,你可以通过向后端发送请求,让后端执行聚合查询,然后前端接收并处理这些数据。

假设你有一个后端服务使用Node.js和MongoDB,以下是一个如何在后端执行聚合查询,并在uni-app前端接收这些数据的示例。

后端代码(Node.js + MongoDB)

首先,确保你安装了必要的包:

npm install express mongoose

然后,创建一个简单的Express服务器,并设置一个路由来处理聚合查询:

const express = require('express');
const mongoose = require('mongoose');
const app = express();
const port = 3000;

mongoose.connect('mongodb://localhost:27017/yourdatabase', { useNewUrlParser: true, useUnifiedTopology: true });

const YourSchema = new mongoose.Schema({
    field1: String,
    field2: Number,
    // 其他字段...
});

const YourModel = mongoose.model('YourModel', YourSchema);

app.get('/api/aggregate', async (req, res) => {
    try {
        const result = await YourModel.aggregate([
            { $group: { _id: "$field1", total: { $sum: "$field2" } } },
            // 其他聚合操作...
        ]);
        res.json(result);
    } catch (error) {
        res.status(500).json({ error: error.message });
    }
});

app.listen(port, () => {
    console.log(`Server running at http://localhost:${port}`);
});

前端代码(uni-app)

在uni-app中,你可以使用uni.request来发送HTTP请求到后端API,并处理返回的数据:

uni.request({
    url: 'http://localhost:3000/api/aggregate',
    method: 'GET',
    success: (res) => {
        if (res.statusCode === 200) {
            const data = res.data;
            // 处理数据,例如渲染到页面上
            console.log(data);
            // 假设你有一个页面组件来显示这些数据
            this.setData({
                aggregateData: data
            });
        } else {
            console.error('请求失败', res.data);
        }
    },
    fail: (err) => {
        console.error('请求失败', err);
    }
});

在这个例子中,后端执行了一个MongoDB的聚合查询,并将结果以JSON格式返回给前端。前端接收到数据后,可以将其渲染到页面上或进行其他处理。注意,实际项目中你可能需要考虑跨域问题、错误处理、数据验证等更多细节。

回到顶部