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格式返回给前端。前端接收到数据后,可以将其渲染到页面上或进行其他处理。注意,实际项目中你可能需要考虑跨域问题、错误处理、数据验证等更多细节。